Più di un hacker, un virtuoso: Peter Deutsch

lwAl solito tutto parte da un tweet, da uno che seguo e mi segue 😀 Lisp World, questo.
replinvTweet eccezionale, l’immagine è fantastica, visto la bici? e il resto, certo. Però –forse– c’è un’esagerazione nel cinguettio: “Inventor of the Lisp REPL“.
Per i non lispers REPL sta per Read, Eval, Print, Loop. E la conoscono e usano in parecchi, non è necessario essere lispers. È la versione interattiva dei linguaggi, quella che trovate se scrivete python, python3, idle, sbcl --noinform, rlwrap sbcl --noinform, racket -il xrepl, gst, irb --simple-prompt, …
Non è che devo continuare vero? Perché se servisse ne avrei tanti altri. D’accordo loro non la chiamano REPL ma versione interattiva o qualcosa di simile ma è quella.

Tornando a Peter una googlata per immagini ha chiarito tutto parecchio.
Ecco: L. Peter Deutsch’s PIVOT program verification system.

OK, c’è tutto. E voi fate come volete ma Dusty Decks io lo RSSisco, anzi già fatto.

Però, ora che ci penso. Quando ero giovane anch’io facevo delle REPL, senza sapere che si chiamavano così e erano già state inventate (a me nessuno mi dice mai niente, e anche allora nessuno mi diceva mai niente e non c’era ancora il Web, anzi nemmeno i BBS). Perché fare una REPL non è difficile, la parola chiave è loop, un ciclo indefinito. Con il Fortran si faceva con un GOTO che ti rimandava all’inizio del codice. Il mio collega e amico (più amico che collega) Giorgio aveva riscritto l’editor ED del Prime in GW-Basic (mancava solo il comando gmodify ma tanto quello non lo usava nessuno).

Anzi, sapete che vi dico?
Mi viene voglia di crearne una, un abbozzo, uso Python 3.x anche se … OK, meno conosciuto di Python e io sono un evangelista di Python da sempre, ecco:

Prima versione semplicissima:

#!/usr/bin/python3

while True:
    st = input('-> ')
    print(eval(st))

r0ma …

r1

Bisogna gestire le eccezioni …

#!/usr/bin/python3

while True:
        st = input('-> ')
        try:
                print(eval(st))
        except Exception:
                pass

r2ancora …

#!/usr/bin/python3

stprec = ''
diz ={}
while True:
    st = input('-> ')
    peq = st.find('=')
    print(st, peq)
    try:
        if st == 'st':
            st = stprec
        elif peg >= 0:
            key_ = str(st[:peg].strip())
            dat_ = st[peg:].strip()
            diz[key_] = dat_
        else:
            print(eval(st))
    except Exception:
        pass
    stprec = st

r3e poi

#!/usr/bin/python3

stprec = ''
peg = -1
diz = dict()
while True:
    st = input('-> ')
    if st == 'quit' : quit()
    peg = st.find('=')
    if st == 'st':
        st = stprec
    elif peg >= 0:
        key_ = st[:peg].strip()
        dat_ = st[peg + 1:].strip()
        diz[key_] =dat_
    else:
        try:
            if st in diz:
                st = diz[st]
            print(eval(st))
        except:
            pass
    stprec = st

r4
E si potrebbe continuare, volendo, questo…

:mrgreen:

Posta un commento o usa questo indirizzo per il trackback.

Commenti

  • Filippo Montecchio  Il 6 agosto 2015 alle 09:19

    Ecco il tuo sogno, finire sulla rete citato così, come il tizio in foto… 😀

    • juhan  Il 6 agosto 2015 alle 09:22

      Ebbene sì; ma sai c’è di mezzo un fattore di scala imponente. E poi ho anche abbandonato (temporaneamente per il caldo) la bicicletta.

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: