lcm – J (e Python)

La serie su lcm  –minimo comune multiplo– continua, ancora per questa puntata. Poi come tutte le cose belle (a me è piaciuta questa passeggiata in territori nuovi (per me)).
I post precedenti sull’argomento (proposto dall’amica Annarita) li trovate qui, qui e qui.

Oggi una cosa completamente diversa, frutto della googlata per vedere quali linguaggi trattavano l’argomento e come. Subito sono arrivato a una pagina molto interessante e non vi dico la fatica per riuscire a non dirvelo finora!

rosetta

Rosetta Code è davvero da seguire, lcm lo trovate qui: Least common multiple.

Uh! 60 linguaggi, alcuni mai sentiti. Ma tra i tanti (c’è anche awk però sarebbe una quasi ripetizione del post sul Fortran) ce n’è (secondo me) uno speciale: J.

J provides the dyadic verb *. which returns the least common multiple of its left and right arguments.

Vero che ci sarebbero anche altre cose interessanti: CL (i saputi non dicono mai Common Lisp), Factor e Haskell ce l’hanno già pronto. Ma torno a J.

J

Questa è l’occasione buona per installarlo, me ne hanno parlato in passato, ne ho parlato anch’io e oggi è il giorno di ora o mai più.

L’installazione si fa partendo dalla J Home, crea due directories nella home (su Linux, esiste anche la versione Windows). Ci sono tre modalità d’uso: classica, nel browser e con GUI. Io che sono vecchio uso la migliore.

Siccome l’installazione è non standard la prima cosa che conviene fare è un link simbolico (quello che in Nautilus viene chiamato collegamento) all’interprete, nel mio caso ecco il risultato:

link

Allora proviamo…

j0

Funziona! Un paio di dritte per chi, come me, non afferra subito tutto al volo:

  • il prompt di J è 3 spazi, quasi invisibile;
  • exit'' per uscire, non vi dico l’energia spesa per trovarlo (leggere il manuale prima! o almeno un’intro).

Esiste anche la possibilità di fare uno script che invochi l’interprete. Però nella shebang dovete mettere la vostra home scritta per bene, non vale ~ e neanche $HOME.

Ma si può fare anche con la shell, così:

#!/bin/sh
echo "(*./)" $* | j7
exit''

j1

OK.

Si può fare un passo ancora, integrare lo script J entro il nostro linguaggio abituale, per esempio Python. Cerrrto usando la pipe.
Avevo già trattato questo argomento nell’antichità, qui ma avevo usato funzioni che adesso sono deprecate e poi si può fare più brevemente, così:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import subprocess

cmd = ['./lcm.j', '3 4 5 6']

res = subprocess.check_output(cmd)
p = res.find('\n')
num = res[:p]
n = int(num)
print n

j2

L’esempio è minimo perché su Python sappiamo tutto vero? E poi devo andare a leggere il manuale di J, promette che in sei mesi dimentico che esistono i loop 😉 🙂 😀

Posta un commento o usa questo indirizzo per il trackback.

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: