Ben oltre Perl: J

Questa è solo una storiella, il resoconto di un incontro tra vecchi smanettoni (ormai appartengo alla classe dei nonni), di quelle che si fanno a fine anno o nelle ferie. Questa è della settimana scorsa.

+/1e6<,!/~>:i.100

Questo è un programma; no, non un’istruzione, un programma intero.
Sintetico vero? Cosa fa ve lo dico in fondo (tipo “a pag.46” della Settimana Enigmistica) ma per intanto la storiella.
Io Unix l’ho scoperto attorno al 1984-1985 (circa, nèh!). E per il primo lavoro serio il capo era ZAP (adesso non usa più questo nick), un matemattoico di qualche anno più anziano di me, sia per età che esperienza.

Naturalmente si faceva tutto in Fortran, come al solito. Però c’era da fare un post-processore semplice e io l’ho fatto usando sed, awk, grep e non so cos’altro. Anche perché dovevo impratichirmi e poi ero rimasto entusiasta della pipe (questo mi fa pensare che forse era anche prima dell’84, la pipe, rudimentale, c’era anche nel DOS).
ZAP, senza nemmeno starmi a sentire mi impose di tradurre tutto in Fortran. Delusione, profonda, ma lui era il capo.

Poco dopo se ne andò a lavorare da un’altra parte e mi chiese se volevo seguirlo; risposi che avevo un sacco di cose da finire e persi l’occasione 😦

OK, adesso si occupa di problemi statistici (in realtà non ho capito cosa fa) e usa linguaggi come A+ e J. J in particolare è l’ultimo discendente di APL, roba astrusa quanto basta per piacere ai matematici.

Avete presente il Perl, quello che

Perl frightens me. It looks like an explosion at an ASCII factory

(qui ma se googlate perl factory explosion rimarrete stupiti).

Ecco Perl in confronto a J è normale, anzi prolisso. Davvero. Io ZAP l’ho perdonato ma sappia che è (anche) colpa sua se adesso uso Python.

Eccoci giunti a p.46, la soluzione la trovate qui.

E se qualcuno vuole saperne di più su J c’è sempre Wiki, come faremmo senza Wikipedia? 😉

Posta un commento o usa questo indirizzo per il trackback.

Commenti

  • glipari  Il 5 ottobre 2012 alle 10:39

    Bella storia! APL è stato uno dei primi linguaggi che ho conosciuto, e subito dimenticato (ci voleva una tastiera speciale che non avevo…). I linguaggi così criptici però non fanno per me!

    • juhan  Il 5 ottobre 2012 alle 10:42

      Era però possibile usare la tastiera normale (forse anche sul Prime ma non ricordo bene; in quel periodo passavo da un ‘puter all’altro).

  • robitex  Il 5 ottobre 2012 alle 17:48

    Chissà quale linguaggio avrebbe usato oggi Alan Turing tra i mille disponibili…
    Probabilmente ne avrebbe ideato uno proprio nel campo dell’intelligenza artificiale, e chissà con quale licenza lo avrebbe rilasciato, libera oppure chiusa.
    Non sono tanto importanti le risposte a queste domande, piuttosto è una sensazione strana quella di pensare a Turing oggi, una figura così influente sull’informatica quando non esisteva ancora l’informatica ed infuriava la seconda guerra mondiale.
    …forse il J non gli sarebbe dispiaciuto. Con quelle sequenze criptiche simili al borbottio di una macchina di Turing.
    Ciao

  • Jean M. M.  Il 20 ottobre 2012 alle 00:08

    Ah, che meraviglia il J 🙂 Per me ha un fascino incredibile, ci ho perso dietro un’infinità di tempo ma è durissimo da digerire. Specie la guida, che sembra quasi… quasi una presa in giro, una montatura. Eppure è di un rigore pazzesco.

    Il J può sembrare arabo, ed in effetti si legge da destra a sinistra. Mi sento obbligato a decodificare il programma di cui sopra, è più forte di me!! Lo riporto:
    +/ 1e6 : i.100

    Per prima cosa, i.100 crea un vettore con i numeri da 0 a 99, e il “verbo” >: li incrementa tutti di uno. Abbiamo allora tra le mani il vettore 1, 2, …, 100.

    Per non farla troppo lunga, diciamo che f / ~ serve a fare una tabellina dove la funzione f viene applica ad ogni combinazione dei numeri del vettore. Se f è il prodotto, abbiamo una bella tavola pitagorica. In questo caso abbiamo il “verbo” ! che calcola le combinazioni. Il risultato è il triangolo di Tartaglia e molti zero.

    Trasforma allora la tabella in un vettore con il verbo , (la virgola!) e controlla i numeri maggiori di 1e6. In ultimo somma con +/. Ora che l’abbiamo “letto”, capiamo che il programma conta quante combinazioni di (n su k), per n e k tra 1 e 100, danno come risultato un numero maggiore di un milione. Per la cronaca, il mio interprete dice che sono 4075. E in pochi secondi mi dice anche che
    +/1e6:i.1000
    fa 494861. Sfido a ottenere la stessa cosa in un altro linguaggio di programmazione!

    Ecco, mi sa che hai risvegliato in me il tarlo del J, mannaggia 🙂

    • juhan  Il 20 ottobre 2012 alle 09:31

      Jean mi sa che l’argomento (mio ma soprattutto tuo) merita un post, prossimaente 😉

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.

%d blogger hanno fatto clic su Mi Piace per questo: