2015-05-24 2 views
4

Что следующее определение функции/объявление означает:Haskell определение функции без ->

maxCollatz :: (Integer, Integer) 

Я смущен, потому что я не знаю, какие аргументы принимает и поэтому то, что производит. Потому что обычно в определении функции есть ->. E. g. Int -> Int.

P.S. Снова извините за этот вопрос.

ответ

8

maxCollatz - пара целых чисел (Integer, Integer). Это не функция, она не принимает аргументов и не вызывается для создания чего-либо; это просто is пара целых чисел.

Синтаксис для объявления типов, а затем реализации объявлений верхнего уровня в Haskell является синтаксисом для определения значений. Функции - это значения, поэтому они включены в это, но все остальное.

+0

Основываясь на его имени, я думаю, что это либо пара целых чисел, либо ⊥, и никто не знает, что именно. – dfeuer

0

Эта функция не принимает никаких аргументов, следовательно, это всего лишь постоянный кортеж (или пара) из двух целых чисел.

0

Это сигнатура функции, а не целое определение функции.

И это постоянная, а не «истинная функция» (я видел, как это обсуждалось). Он возвращает кортеж из 2 целых чисел, но ничего не принимает.

1

Линия кода является допустимой сигнатурой функции, потому что важно понимать, что функции не нужно принимать какие-либо аргументы.

Количество аргументов функция принимает называют его arity.

В логике, математике и информатике, арностью функции или операции является число аргументов или операндов функции или операции принимает.

В этом случае функция принимает 0 аргументов и является arity 0. Функция с arity 0 часто упоминается как константа или нулевая функция.


В Python подобная функция будет выглядеть следующим образом

def pair(): 
    return (1,1) 

Если вы знакомы с Python, ясно, что эта функция не принимает никаких аргументов и возвращает пару чисел. Это именно то, что описывает сигнатура функции.

+3

'maxCollatz' - это пара' Integer ', а не функция. Функция в Haskell всегда принимает ровно один аргумент, поэтому нет 0 функций arity: http://conal.net/blog/posts/everything-is-a-function-in-haskell –

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