Dell’ottimo Michael Burge 💥 non so molto; lo si trova su Twitter, ha un blog pieno di cose troppo nerdose per me. È nuovo, giovane immagino e per me un maestro. Ecco un suo tweet, muto, cioè subito via con il codice.
Ma funzionerà? mi sembra troppo semplice, forse è meta…
Non resta che provare
* rec $ ghci
GHCi, version 8.0.2: http://www.haskell.org/ghc/ :? for help
Prelude> fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
Prelude> fibs !! 8
21
Prelude> fibs !! 12
144
Prelude> fibs !! 0
0
La prima riga definisce la funzione fibs
che crea la lista infinita dei numeri di Fibonacci fornendo i valori dei primi 2 e definendo il valore del successivo come (+)
dei valori della lista stessa. !!
estrae l’elemento indicato nella lista. Semplice vero? l’ho capita anch’io. E siccome Haskell è lazy –OK, non voglio ripetermi.
OK, ma io preferisco Racket allora ecco. È comodo eseguirlo nel suo ambiente di sviluppo, DrRacket, perché devo caricare il linguaggio lazy
:
Ma io sono della vecchia scuola, quella della REPL e allora ecco…
* rec $ racket
Welcome to Racket v6.11.
> (require lazy)
> (define fibs (cons 0 (cons 1 (map + fibs (rest fibs)))))
> (displayln (list-ref fibs 8))
21
> ^D
* rec $
OK. È la tradudione letterale del programma Haskell. Più verboso. Ma Michael (lo sapete che si è fatto un linguaggio tutto suo, Pyramid) non si ferma qui, va oltre. Per procedere devo acquisire il modulo sweet-exp
e qui è comodo davvero DrRacket operando da menu: File/Install Package...
Fatto e allora (questa volta la REPL non basta):
Nota: il tweet contiene un errore, manca la parentesi aperta prima di +
.
Nota per me: devo informarmi su Sweet, non sono l’unico anche Jesse 💥
Come se non bastasse ecco William 💥
Sì, avendo tempo ci sarebbe da vedere anche Cur.
⭕