Picolisp

PicoLisp estas libera dialekto de Lisp.  Ĝi ruleblas sur GNU/Linukso kaj aliaj Poziksaj operaciumoj.

 Povoj 

Ĝia fundamenta principo estas "simpleco".  Ĝi limigas sin al unu
sola interna datumtipo (ĉelo), sen rezigni pri fleksebleco kaj
esprimpovo.  Je lingva nivelo, ĝi apogas nur tri datumtipojn
(numeraloj, simboloj, kaj listoj), konstruitajn el internaj ĉeloj.

Ĉar la unusola disigebla datumtipo estas la ligillisto, ekzistas
multaj interuzeblaj funkcioj por trakti listojn.  Pro tio,
PicoLisp-aj programoj ofte pli koncizas - kaj samtempe pli rapidas
- ol tiuj de aliaj interpretataj lingvoj (vidu "Ekzemploj" sube).
Funkcioj liberas de la limigoj trudataj de tradukilo, kaj do povas
akcepti arbitrajn tipojn kaj nombrojn de argumentoj.  Makrooj
necesas nur maloftege.

Speciala povo estas prafunkcioj datumbazaj. Persistaj simboloj
estas praobjektoj; aŭtomate enŝargataj el datumbazo dum atingo,
kaj reskribataj dum modifo. Aplika programo konsistas el klasa
hierarkio de entoj kaj rilatoj.

Plue: Prologa motoro kaj datumbazaj informmendoj, disaj datumbazoj, 
malfermitaj C-lingvaj funkcioj kaj indiĝenaj C-funkcioj, regado
de idaj procezoj, interproceza komunikado, grafika interfaco por
krozilo, internaciigo.

 Historio 

Originale projektita sur Apple Macintosh dum la 1980-aj jaroj, kaj
uzata por komercaj aplikaĵoj ekde tiam. Oni baldaŭ adaptis ĝin
al DOS kaj SCO UNIX, kaj uzis ĝin ĉefe sur Linukso ekde 1993.
Oni aldonis datumbazan kapablon meze de la 1990-aj jaroj.

Kvankam la unuaj versioj estis miksaĵo de C kaj maŝinkodo, en
1999 oni reverkis ĝin tute en C. Oni eldonis tiun version en
2002 sub la licenco GNU GPL. Licenco estas ĉanĝita al MIT/X11 en 2010.

En 2009 eldoniĝis 64-bita versio.  Pro diversaj limigoj de C-lingvo, la aŭtoro anstataŭe verkis la interpretilon en simpla "ĝenerala maŝinkodo", kaj verkis PicoLisp-an programon por traduki ĜM-on al la specifa maŝinkodo de x86-64.

Java versio eldoniĝis in Decembro de 2010. 
 Ekzemploj 

La jena programo plenumas la teston "Fannkuch" priskribata ĉe
la retpaĝo de 
Alioth:

#!/usr/bin/picolisp lib.l

(let (N (format (opt))  Lst (range N 1)  L Lst  M)
   (recur (L)  # Permute
      (if (cdr L)
         (do (length L)
            (recurse (cdr L))
            (rot L) )
         (let I 0  # For each permutation
            (and (ge0 (dec (100000000))) (prinl (reverse Lst)))
            (for (P (copy Lst)  (> (car P) 1)  (flip P (car P)))
               (inc 'I) )
            (setq M (max I M)) ) ) )
   (prinl "Pfannkuchen(" N ") = " M)
   (bye) )

Tiu ĉi montras kiel esprimpova kaj konciza povas esti PicoLisp-a
programo, kompare kun la ceteraj kontribuaĵoj ĉe Alioth.

Kontraste al la supra memstara programeto, jen la aspekto de
difinita funkcio:

(de fannkuch (N)
   (let (Lst (range 1 N)  L Lst  Max)
      (recur (L)  # Permute
         (if (cdr L)
            (do (length L)
               (recurse (cdr L))
               (rot L) )
            (zero N)  # For each permutation
            (for (P (copy Lst)  (> (car P) 1)  (flip P (car P)))
               (inc 'N) )
            (setq Max (max N Max)) ) )
      Max ) )

Kompreneble, rultempo estas pli longa ol tiuj de plejmultaj
tradukataj lingvoj. Ni mezuris 18 minutojn sur 1.0 GHz Athlon;
estu malpli sur la Intel Q660 de Alioth. Pro ties kvar-koreco,
eblas kvaronigi la rultempon per paraleligi la programon:

(de fannkuch (N)
   (let (Res (need N)  Lst (range 1 N)  L Lst  Max)
      (for (R Res R (cdr R))
         (later R
            (let L (cdr Lst)
               (recur (L)  # Permute
                  (if (cdr L)
                     (do (length L)
                        (recurse (cdr L))
                        (rot L) )
                     (zero N)  # For each permutation
                     (for (P (copy Lst)  (> (car P) 1)  (flip P (car P)))
                        (inc 'N) )
                     (setq Max (max N Max)) ) )
               Max ) )
         (rot Lst) )
      (wait NIL (full Res))
      (apply max Res) ) )

 Eksteraj ligiloj 
Hejmpaĝo de Picolisp
Plej lasta (testa) versio)
Paĝo por elŝuto
Manlibro
#picolisp IRC kanalo
Arkivo de dissendolisto

 Referencoj 

Paper A Radical Approach to Application Development (PDF)
c't Magazine Database contest results (in German)
Lambda the Ultimate 2007 A Case for Minimalist Interpreters?
John Fremlin's blog  PicoLisp takes the performance crown?

Kategorio:Funkciaj programlingvoj