lcm – chissà se newLISP…

kosh04Nel post precedente su questo argomento —lcm – minimo comune multiplo— abbiamo visto com’è semplice creare questa funzione con Python.

Ma ci sono anche altri linguaggi, sono sicuro che nel mio preferito (chissà perché ogni volta che ne parlo cala il numero di visite al blog?) questa funzione ce l’ha, predefinita, sicuro. Controlliamo…

Ehmmm! No! Ma al solito: niente panico! Avete presente la guida?.

Non sono l’unico a amare newLISP, c’è un forum attivo, ecco dove si ritrovano i soliti Kazimir Majorinc (peccato non scriva più sul blog!) e cormullion (peccato abbia abbandonato il blog!). E non manca la dritta (hvala Kazimir):

Intelligence agency informed me that kosh implemented one lcm

Il link ci manda al github di kosh04, Shigeru Kobayashi. Il quale è titolare del blog lisperblog del quale vedete il banner all’inizio del post. Vedete che conviene studiare?

In ogni caso, tornando a lcm ecco la soluzione di kosh:

;; Returns the least common multiple of one or more integers.
(define (lcm2 a b)
  (if (or (= a 0) (= b 0))
      0
      (/ (abs (* a b)) (gcd a b))))

(define (lcm)
  (cond ((empty? (args)) 1)
        ((empty? (rest (args))) (int (abs (args 0))))
        (true
         ;; reduce
         (apply lcm2 (args) 2))))

Un capolavoro nella sua semplicità 😀 L’uso ricorsivo di apply fa quello che in Python era svolto da reduce.

kosh ci fornisce anche una macro, altrettanto bella:

(define-macro (=? x => y)
  (if (!= (eval x) (eval y))
      (throw-error (format "failed: %s =/> %s"
          (string x) (string y))))
  true)

non resta che provare

lcm1

OK! 😀

Ma ci sono ancora altri linguaggi … Prossimamente … 😉
Inoltre: non ho mai parlato delle macro, prossimamente … 😀

Posta un commento o usa questo indirizzo per il trackback.

Trackback

  • […] puntata della telenovela lcm, le precedenti sono qui e qui. Perché ci sono un paio di cose nuove (per me almeno) da dire sull’argomento. Roba che non […]

  • lcm – J (e Python) | Ok, panico su 19 marzo 2013 alle 09:27

    […] me)). I post precedenti sull’argomento (proposto dall’amica Annarita) li trovate qui, qui e […]

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: