Exista o functie cons ca in LISP ?

From HaskellWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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.