Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
 Аватар для Araneo
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587

Вычисление на уровне типов

11.09.2015, 16:29. Показов 1428. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Итак идея. Я хочу поизвращатся и запилить прямо в код юнитесты. Если тест не выполняется(возвращаемое функцией значение не равно ожидаемому) то код не собирается. Единственное что пришло в голову - вычисление на уровне типов (числа чёрча и иже с ними), вопрос, где про это можно по возможности развёрнуто прочитать?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.09.2015, 16:29
Ответы с готовыми решениями:

Вычисление суммы четных элементов на каждом уровне исходного списка
Написать функцию, вычисляющую сумму четных элементов-чисел на каждом уровне исходного списка. Рекомендуется следующая форма результата : ...

Создает на n - уровне вложенный список, элементом которого на самом нижнем уровне является n
Я решил задачу так: CL-USER 1 > (defun f (l n) (cond (( eq n 0) l) ((null l) (f (list n) (- n 1))) (t (f (cons...

Вычисление ряда с помощью 3х типов цикла
Дано натуральное n. Написать программу вычисления значений Написать тремя способа : 1) do 2) while 3) for

2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,707
Записей в блоге: 14
11.09.2015, 18:26
Может быть, поможет это: С.К.Клини Введение в математическую логику?
3
Модератор
 Аватар для Curry
5158 / 3482 / 536
Регистрация: 01.06.2013
Сообщений: 7,549
Записей в блоге: 9
11.09.2015, 19:11
Лучший ответ Сообщение было отмечено Araneo как решение

Решение

На уровне типов можно задать константы : https://downloads.haskell.org/... erals.html
https://ghc.haskell.org/trac/g... ats/Basics
но работа с ними в compile-time весьма ограничена. Функции, выполняющиеся в compile-time, - это сплайсы (макросы) TH. Вызывать из них можно любые безмонадные, и даже под монадой IO функции.
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
{-# LANGUAGE  TemplateHaskell #-}
module THTest where
 
import Language.Haskell.TH
import Control.Monad
import MyModule
 
tst :: DecsQ
tst = do
    let r = myFunction 123
    when (r /= 28 ) $ 
        reportError "myFunction is bad"  
    return []
вызывать из другого модуля, просто как
Haskell
1
2
3
import THTest
 
tst
Добавлено через 27 минут
Araneo, я ответил по существу вопроса. А, вообще то оставлять тесты в рабочем коде не нужно. Тесты выносят в отдельные модули которыми проверяют другие модули (unit тестирование). А для рабочей сборки используется другой набор модулей или они отключаются условной компиляцией. Это касается почти любого языка, и Haskell тоже.
Так же, существуют пакеты для тестирования на Haskell
http://www.serpentine.com/criterion/tutorial.html
http://hackage.haskell.org/package/QuickCheck
и другие
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.09.2015, 19:11
Помогаю со студенческими работами здесь

Шаблонное вычисление типов и Variadic Templates
Можно ли сделать что-то вроде этого: Этот код, естественно, не компилируется: template<typename T> class mtd_parser; ...

Чтение и запись типов, массив типов и List<> данных в файл
Здравствуйте Подскажите способ записи и чтения любых типов данных (не компонентов) Например это: string в котором текст может быть...

Создать массивы разных типов(3 типов), вывести их на экран
Создать массивы разных типов(3 типов), вывести их на экран.

Не требуется приведение типов при умножении типов Byte
Читал тут книгу(Г. Шилдт, &quot;Полный справочник по C#&quot;), и нашел такое (ст. 77) Поскольку при умножении, например, 2 чисел типа byte,...

Найти предельные значения для целочисленных типов. Не использовать заранее определенные константы границ типов.
Буду благодарен! Найти предельные значения для целочисленных типов. Не использовать заранее определенные константы границ типов.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru