È tail recursive, ed in ogni caso se ti serve qualcosa puoi benissimo farlo da solo, dato che il linguaggio lo devi imparare tu.
È tail recursive, ed in ogni caso se ti serve qualcosa puoi benissimo farlo da solo, dato che il linguaggio lo devi imparare tu.
"Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares
non capisco perchè ti arrabbi tanto, era solo un' indicazione sul codice dovesse servire a qualcuno
Non mi sono arrabbiato, è che non ti aiuta ad imparare un linguaggio chiedere ad altri di scrivere del codice per te.
"Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares
let rec sums ((s::_) as ss) xs =
match xs with
| []->[]
| [x] -> (s+x) :: ss
| (x::xs) -> sums ((s+x)::ss) xs;;
dovendo semplificare per fare ad esempio la somma iterata e basta
es. [1,2,3,4,5] -> [0,1,3,6,10,15]
per che motivo questo codice solleva un eccezione?
Come la chiami? che errore ti da?
In ogni casocodice:let rec sums ((s::_) as ss) xs = match xs with | []->[] | [x] -> (s+x) :: ss | (x::xs) -> sums ((s+x)::ss) xs;;
E', in tutti i casi escluso (sums ss []), equivalente acodice:let rec sums ((s::_) as ss) xs = match xs with | []->ss | (x::xs) -> sums ((s+x)::ss) xs;;
"Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares
molto gentile,
mi sorge ancora un dubbio, per fare ad esempio, duplicare se un elemento è maggiore del precedente,
si può utilizzare un pattern del tipo a::b::resto e controllare se b è > di a?
Puoi fare tutto quello che vuoi con il pattern matching...
Stai comunque sempre attento ai casi base e alle limitazioni del dominio
"Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares