2016-08-26 3 views
0

Это правильный способ описания спецификации и определения функцииКак описать это определение функции?

MagicHaskeller генерирует функцию, заданную спецификацией.

Например спецификация: f [ 3 , 4 , 5.6 ] ~= 4.2 генерирует функцию f = (\a b -> sum a/3)

Другими словами: Функция: f [ 3 , 4 , 5.6 ] ~= 4.2 принимает список трех значений и генерирует приблизительное значение путем применения преобразования к этим значениям списка. Сгенерированная функция f = (\a b -> sum a/3) принимает функцию a, которая суммирует значения списка и делит на 3. Я думаю, что утверждение takes a function a which sums the list values and divides by 3 неверно. Какова правильная интерпретация функции f = (\a b -> sum a/3)?

Правильно ли моя терминология?

+2

Uhm .. что-то мне не нравится: функция 'f = (\ ab -> sum a/3)' does _not_ удовлетворяет спецификации 'f [3, 4, 5.6] ~ = 4.2', так как она принимает дополнительный аргумент 'b'. Вы уверены, что ничего не пропустили ни в одном из них? Если MagicHaskeller действительно сообщил об этой функции для этой спецификации, я бы счел ее ошибкой. – chi

ответ

1

Не совсем, но близко.

fявляется функцией (это имя связано с лямбда-выражения), которая принимает два аргумента: список номеров a и некоторые b, что полностью игнорируется. Функция возвращает сумму чисел в списке, деленную на три.

+0

\ a является синтаксисом для некоторого списка типа a в Haskell? –

+1

'\' вводит лямбда-выражение. Далее следуют аргументы ('a b' здесь) и стрелка. –

+0

@ blue-sky Обычно выражение лямбда не используется напрямую; 'f a b = sum a/3' может быть вам более знакомо. – chepner

Смежные вопросы