Почему моя функция Haskell не принимает отрицательные числа?

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

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

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

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

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

9
задан CharlesB 4 May 2012 в 12:19
поделиться

1 ответ

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

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

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

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

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

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

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

10
ответ дан 3 November 2019 в 01:55
поделиться
Другие вопросы по тегам:

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