Sono un novizio in Haskell e spero che questa domanda non sia sciocca.La "lista" è gestita in modo specifico nel modello di corrispondenza di Haskell?
ho visto così tanto esempio che quando sto avendo una lista, io sono in grado di eguagliare e legare "elemento composizione" della lista per singola variabile:
listSizeDesc :: [a] -> String
listSizeDesc [] = "Emtpy"
listSizeDesc (x:xs) = "Something inside"
Tuttavia, ho cercato di fare qualcosa Mi piace:
foo :: Int -> String
foo 0 = "Zero"
foo (n - 1) = "next number is " ++ show n
Non funziona.
Mi sembra che sia (n-1) che (x: xs) descrivono come l'argomento è "creato" e associano il "componente" a un argomento. Il modo in cui l'elenco è abbinato appositamente progettato per facilitare la ricorsione? Coz mi sembra che questa logica di matching/argument-binding non si applica ad altre funzioni tranne (:).
Sicuramente non una domanda stupida. Questa è la mia comprensione di un collega newbie: le liste non sono "speciali". L'abbinamento di modelli funziona con: perché: è un costruttore di tipi per elenchi. Funziona costruttori di tipi ma non per funzioni generali. In che modo questo lavoro è spiegato abbastanza bene [qui su WikiBooks] (http://en.wikibooks.org/wiki/Haskell/Pattern_matching) –
Non esiste una domanda sciocca, a patto che sia ben fatta. – hugomg
Risposta breve: No. –