Exista o functie cons ca in LISP ?
Da, numai ca nu se numeste 'cons'. Si este un operator binar infixat - dar in esenta este tot o functie.
Se scrie ':'
Lista [1,2,4,7] este de fapt 1:2:4:7:[] si deoarece operatorul asociaza la DREAPTA 1:2:4:7:[] inseamna 1:(2:(...)) adica 1:(2:(4:(7:[] ))).
Tipul (semnatura) acestei functii este unul polimorfic. Ea primeste un argument de tip x si un al doilea argument de tip lista de x. Din ele produce o lista de x-uri.
(:) :: x -> [x] -> [x]
Sau daca vreti, asa, evidentiind pe randul al doilea tipul rezultatului:
(:) :: x -> [x]
-> [x]
Despre acest operator se spune ca ar fi provocat mari discutii in comitetul Haskell. Unii vorbitori au cerut ca : sa fie rezervat pentru semnaturile functiilor , ca in matematica. f:R-> R
A invins partida celor care il doreau pe ':' insemnand cons.