09 novembre, 2020

Alle volte il codice vecchio...

Non sono il solo che rovista nelle cosa di una volta (quando ero giovane) e capita che -- come a Alfred, qui: #MIT #CADR in risposta Duncan. Uh! da verificare, Duncan (oubiwann), è qui: For lunch today? Symbolics Lisp Machine Open Genera. A seguire il thread si può facilmente farlo anche noi, Duncan è didascalico, ma io mi sono fermato prima, alla verifica di Alfred (avendo tempo sarebbe da followare, anzi: fatto).

È vero che

risultato della funzione (classica)


come dice Alfred? Ecco, la formula mi sembra ok, ma si sa che... adesso verifico.

Oggi sono tanti i linguaggi di programmazione con precisione arbitraria, una volta con il Fortan c'era il terrore del limite 2^15 -1, 32767. Quando si dice la combinazione --o per meglio dire serendipity-- nei giorni precedenti mi ero occupato di dc, desk calculator, per via della RPN, notazione polacca inversa, e tra gli esempi c'è proprio quello che cerco, il fattoriale.

Adesso devo confessare una cosa: RPN è ottima se non devi fare cose troppo complesse, personalmente mi perdo quando perdo mnemonicamente lo stack. Ma si sa che non sono così tosto e alla formula del fattoriale

non ci arriverei mai! Comunque


ecco! risultato diverso da quello riportato da Alfred. Devo provare con altri linguaggi, quelli che uso abitualmente.

Python


bc
Non solo io, tanti, da sempre, trovano dc ostico e allora ecco bc. La funzione fattoriale non c'è ma si può fare facilmente, sì ricorsiva (mica siamo rimasti al Fortran!):


Octave
Non è esattamente il suo campo, ma ha la printf(), quella del C; forse dovrei rileggermi il manuale, per intanto:


awk
Anche qui dovrei rileggermi il manuale, per adesso così:


Racket
Ho tenuto per ultimo Racket (in questo post, in realtà è andato diversamente ma si sa  il plot  la trama del racconto). Ovviamente la funzione è predefinita:


Io farei così:


nota: sì uso l'alias rkt.

Anzi, raffinando e ricordandomi della tail recursion


Ma per completare la verifica provo a rifare il codice di Alfred, con Scheme (e quindi Racket) cambia la definizione di funzione, le due funzioni predefinite hanno nomi diversi ma l'impianto è quello


OK, tutti d'accordo, Alfred correggi. Duncan fornisce il valore di (fact 42) uguale a quello che ottengo io, quindi conferma che sono ok.

Per me sarebbe finita qui ma mi è stato fatto notare che manca nientemeno che JavaScript! OPZ! correggo, integro. Subito.

Siccome sono un po' niubbo ricorro a Stack Overflow ed ecco:


Nella stessa pagina mi consigliano di provare math.js; sì, ecco:


Ah, Excel:


Basta! 🔴🔵

Nessun commento:

Posta un commento