"Список" специально обрабатывается при сопоставлении с образцом в Haskell?

Я новичок в Haskell и надеюсь, что этот вопрос не глуп.

Я видел так много примеров, что когда у меня есть список, я могу сопоставить и привязать «элемент композиции» списка к отдельной переменной:

listSizeDesc :: [a] -> String
listSizeDesc [] = "Emtpy"
listSizeDesc (x:xs) = "Something inside"

Однако я попытался сделать что-то вроде:

foo :: Int -> String
foo 0 = "Zero"
foo (n - 1) = "next number is " ++ show n

Не работает.

Мне кажется, что и (n-1), и (x: xs) описывают, как аргумент «создается», и связывают «компонент» с аргументом. Разработан ли способ соответствия List специально для простоты рекурсии? Coz мне кажется, что эта логика сопоставления / привязки аргументов не применяется к другим функциям, кроме (:).

19
задан Adrian Shum 3 November 2011 в 09:21
поделиться