Я новичок в 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 list специально разработанным для удобства рекурсии? Мне кажется, что эта логика соответствия/аргумента-привязки не применяется к другим функциям, кроме (:).