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 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.
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:
Allora proviamo…
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''
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
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 😉 🙂 😀