Почему Haskell запрещает функции с помощью & ldquo; различное количество аргументов & rdquo; [Дубликат]

25
задан ehird 5 January 2012 в 18:23
поделиться

3 ответа

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

Также существует небольшая смысловая причуда: скажем, компилятор заполнил такие предложения, чтобы иметь такое же количество шаблонов, как и другие предложения; т. е. ваш пример станет

safeDivide x 0 = x
safeDivide x y = (/) x y

. Теперь рассмотрим, была ли вторая строка вместо safeDivide = undefined; в отсутствие предыдущего предложения safeDivide будет , но благодаря выполненному здесь эта-расширению это \x y -> if y == 0 then x else ⊥ - поэтому safeDivide = undefined фактически не определяет safeDivide как ! Это кажется довольно запутанным, чтобы оправдать запрет таких статей, ИМО.

26
ответ дан ehird 26 August 2018 в 05:46
поделиться

Haskell делает это так, потому что это предшественники (например, LML и Miranda). Нет никаких технических причин, по которым это должно быть так; уравнения с меньшим числом аргументов могут быть расширены. Но наличие разного количества аргументов для разных уравнений, вероятно, является опечаткой, а не преднамеренной, поэтому в этом случае мы запрещаем что-то разумное и редко удается получить отчет об ошибках в общем случае.

5
ответ дан augustss 26 August 2018 в 05:46
поделиться

Значение функции с несколькими предложениями определяется стандартом Haskell (раздел 4.4.3.1) посредством перевода в инструкцию лямбда и case:

fn pat1a pat1b = r1
fn pat2a pat2b = r2

становится

fn = \a b -> case (a,b) of
  (pat1a, pat1b) -> r1
  (pat2a, pat2b) -> r2

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

] Этот перевод действительно имеет смысл, когда каждое предложение имеет такое же количество аргументов. Конечно, могут быть дополнительные правила, чтобы исправить это, но они усложнили перевод для небольшого выигрыша, так как вы, вероятно, не захотели бы так или иначе определять такие вещи, ради ваших читателей.

12
ответ дан Ben Millwood 26 August 2018 в 05:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: