Lispisticamente

lambda

Rispondo con un intero post alla domanda dell’amico ucasano.
Anzi no, questo paperolesso serve a fare pubblicità all’IPO lanciata ieri: E se… Lisp, le iscrizioni sono aperte, nèh!
La domanda è semplice (sovente le domande semplici richiedono una risposta sensata, e magari non tanto semplice):

come lo scriverebbe un lispista? sono curioso 😉

Uh! beh… ecco… sì, sentite, ecco, sentiamo prima cosa ne dice il mysteryouso Patrick Otto Kruse (è tutto in tedesco, lingua che leggo solo attraverso Google traduttore *sigh*).
Dunque Patrick ha un pregevole post (in inglese!) illuminante: A Zillion Ways to Compute the Inner Product of two Vectors in COMMON LISP.
Dice bugie! In realtà propone 9 versioni differenti (ma ne sta cercando altre). Molto differenti tra loro.

Io ho provato a convertirne due in newLISP, la fortranica (5) e la metalinguistica (6), quest’ultima è quella che preferisco.
Tradurre perché il Lisp è un linguaggio di programmazione programmabile. Che è poi il motivo che affascina me e i tipi tosti (non voglio con questo mettermi nella classe, nèh!). Come effetto collaterale genera dialetti. Non esiste un Lisp, ne esistono zillioni.
Fateci caso: la mia versione fortranica (io ho iniziato a programmare in Fortran, anzi c’era solo quello) è molto diversa da quella di Patrick: non c’è l’infame goto, non serve. E ho a disposizione la funzione pop. Certo in CL (Common Lisp) si potrebbe farla, anzi è quasi semplice.

Versione fortranica:

(define (IP a b)
    (set 'c 0)
    (while (> (length a) 0)
        (set 'c (+ c (* (pop a) (pop b))))))

(set 'a '(1 2 3)
     'b '(4 5 6))
(println (IP a b))
(exit)

Versione metalinguistica:

(define (IP a b) 
    (eval (cons '+ (map (lambda (p q) (list '* p q)) a b))))

(set 'a '(1 2 3)
     'b '(4 5 6))
(println (IP a b))
(exit)
Posta un commento o usa questo indirizzo per il trackback.

Commenti

  • ucasano  Il 12 novembre 2014 alle 10:39

    Gulp! forse sarebbe stato meglio aspettare che i tempi fossero maturi… ammetto che la versione metalinguistica mi è davvero poco comprensibile.
    In altre parole, un motivo in più per seguire e digerire coi tempi giusti le tue lezioni sul Lisp.
    Grazie.

    • juhan  Il 12 novembre 2014 alle 10:43

      Per quanto riguarda la versione metalinguistica Patrick la spiega. Poi certo, se parte il corso… Ma sono ancora in attesa di adesioni: se non ne arrivano fare tutto da solo, solipsisticamente, non mi va. Aderite nomerosi & leggere attentamente il prospetto illustrativo, come dice la pubblicità.

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: