Почему моя функция Haskell не принимает отрицательные числа? - PullRequest
9 голосов
/ 12 февраля 2010

Я довольно новичок в Хаскеле, но все же понимаю большинство основ. Однако есть одна вещь, которую я просто не могу понять. Рассмотрим мой пример ниже:

example :: Int -> Int
example (n+1) = .....

(n + 1) часть этого примера как-то предотвращает ввод отрицательных чисел, но я не могу понять, как. Например .. Если бы входные данные были (-5), я бы ожидал, что n будет просто (-6), поскольку (-6 + 1) равно (-5) Вывод при тестировании выглядит следующим образом:

Ошибка программы: ошибка сопоставления с образцом: пример (-5)

Может кто-нибудь объяснить мне, почему это не принимает отрицательные числа?

1 Ответ

10 голосов
/ 12 февраля 2010

Вот как n + k шаблонов определены для работы:

Сопоставление шаблона n + k (где n - это переменная, а k - положительный целочисленный литерал) со значением v завершается успешно, если x> = k, что приводит к привязке n к x - k, а в противном случае не удается. 1006 *

Смысл n + k шаблонов состоит в том, чтобы выполнить индукцию, поэтому вам нужно завершить пример базовым регистром (k-1 или 0 в этом случае) и решить, будет ли параметр меньше этого значения ошибочным или нет. Как это:

example (n+1) = ...
example 0 = ...

Семантика, которую вы, по сути, запрашиваете, была бы довольно бессмысленной и избыточной - вы могли бы просто сказать

example n = let n' = n-1 in ...

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...