Per ulteriori informazioni: ProLOGO Home Page
Il ProLOGO è software libero ed è rilasciato sotto licenza GNU/GPL
Per far girare il ProLOGO bisogna avere lo swi-prolog e le librerie grafiche XPCE. Questi pacchetti sono disponibili sia per Linux che per Windows e possono essere scaricati alla home-page dello swi-prolog
Per chi usa Debian: apt-get install swi-prolog swi-prolog-doc swi-prolog-xpce
ed è fatto.
Il ProLOGO è distribuito attraverso il sorgente prolog in due differenti versioni.
Nella prima versione si trovano tutte le immagini della tartaruga nelle 359 posizioni possibili.
La seconda versione ("reduced") contiene invece uno script PERL per generare automaticamente le immagini necessarie. Perché funzioni deve essere disponibile il comando mogrify che viene fornito con ImageMagick. Per creare le immagini da soli scompattate il file entrate nella directory img/ e lanciate i comandi
./ruota.pl turtle.gif; ./ruota.pl pinguino.gif
Dal prompt del prolog compilare il programma (con il comando [logo].). Da Linux bisogna far partire il prolog con il comando xpce che carica automaticamente le librerie per la grafica. Per far partire il programma lanciare il goal logo.
.
Esempio: per Linux
$ xpce XPCE 6.0.1, February 2002 for i386-linux and X11R6 Copyright (C) 1993-2002 University of Amsterdam. XPCE comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. The host-language is SWI-Prolog version 5.0.0 For HELP on prolog, please type help. or apropos(topic). on xpce, please type manpce. ?- [logo]. Warning: (/home/lor/prolog/logo/logo.pl:37): Singleton variables: [C] Warning: (/home/lor/prolog/logo/logo.pl:38): Singleton variables: [A, B] Warning: (/home/lor/prolog/logo/logo.pl:300): Singleton variables: [L] Warning: (/home/lor/prolog/logo/logo.pl:301): Singleton variables: [Head] Warning: (/home/lor/prolog/logo/logo.pl:302): Singleton variables: [Nome] Warning: (/home/lor/prolog/logo/logo.pl:306): Singleton variables: [OldValue] Warning: (/home/lor/prolog/logo/logo.pl:318): Singleton variables: [Env] Warning: (/home/lor/prolog/logo/logo.pl:345): Singleton variables: [Env] Warning: (/home/lor/prolog/logo/logo.pl:350): Singleton variables: [X, F] Warning: (/home/lor/prolog/logo/logo.pl:356): Singleton variables: [X, Parziale] Warning: (/home/lor/prolog/logo/logo.pl:359): Singleton variables: [X, Parziale] Warning: (/home/lor/prolog/logo/logo.pl:360): Singleton variables: [Env] Warning: (/home/lor/prolog/logo/logo.pl:368): Singleton variables: [Env] Warning: (/home/lor/prolog/logo/logo.pl:369): Singleton variables: [Env] Warning: (/home/lor/prolog/logo/logo.pl:372): Singleton variables: [Env] Warning: (/home/lor/prolog/logo/logo.pl:382): Singleton variables: [Env] Warning: (/home/lor/prolog/logo/logo.pl:383): Singleton variables: [Env] Warning: (/home/lor/prolog/logo/logo.pl:384): Singleton variables: [Env] Warning: (/home/lor/prolog/logo/logo.pl:400): Singleton variables: [Env] Warning: (/home/lor/prolog/logo/logo.pl:405): Singleton variables: [Env] Warning: (/home/lor/prolog/logo/logo.pl:406): Singleton variables: [Env] Warning: (/home/lor/prolog/logo/logo.pl:423): Singleton variables: [Env] Warning: (/home/lor/prolog/logo/logo.pl:429): Singleton variables: [T] Warning: (/home/lor/prolog/logo/logo.pl:430): Singleton variables: [F] Warning: (/home/lor/prolog/logo/logo.pl:445): Singleton variables: [Env] Warning: (/home/lor/prolog/logo/logo.pl:446): Singleton variables: [Env] Warning: (/home/lor/prolog/logo/logo.pl:456): Singleton variables: [Nome, X] Warning: (/home/lor/prolog/logo/logo.pl:457): Singleton variables: [Nome, X] Warning: (/home/lor/prolog/logo/logo.pl:522): Clauses of instr/4 are not together in the source-file Warning: (/home/lor/prolog/logo/logo.pl:536): Singleton variables: [Env] Warning: (/home/lor/prolog/logo/logo.pl:543): Singleton variables: [I] Warning: (/home/lor/prolog/logo/logo.pl:550): Singleton variables: [Lcs] Warning: (/home/lor/prolog/logo/logo.pl:550): Clauses of instr/4 are not together in the source-file Warning: (/home/lor/prolog/logo/logo.pl:563): Singleton variables: [L5] Warning: (/home/lor/prolog/logo/logo.pl:612): Singleton variables: [Angle] Warning: (/home/lor/prolog/logo/logo.pl:627): Singleton variables: [Angle] Warning: (/home/lor/prolog/logo/logo.pl:661): Singleton variables: [X, Y, Angle] Warning: (/home/lor/prolog/logo/logo.pl:663): Singleton variables: [File] Warning: (/home/lor/prolog/logo/logo.pl:686): Singleton variables: [H] Warning: (/home/lor/prolog/logo/logo.pl:713): Singleton variables: [Answer] Warning: (/home/lor/prolog/logo/logo.pl:723): Singleton variables: [X] Warning: (/home/lor/prolog/logo/logo.pl:737): Singleton variables: [X] Warning: (/home/lor/prolog/logo/logo.pl:757): Singleton variables: [Turtle] Warning: (/home/lor/prolog/logo/logo.pl:796): Singleton variables: [X] Warning: (/home/lor/prolog/logo/logo.pl:801): Singleton variables: [X] % logo compiled 0.03 sec, 78,084 bytes Yes ?- logo.
I tipi di dato utilizzati sono gli interi, le liste, le word e i booleani.
Per gli interi sono presenti gli operatori +, -, *, / (divisione intera), % (modulo)
Sono espressioni intere anche:
Una lista ha una testa che è un elemento di un tipo base (intero, booleano, word) e una coda che è ricorsivamente una lista. Le liste sono specificate all'interno di parentesi quadre e i vari elementi sono separati da spazi. L'operatore first restituisce l'elemento in testa alla lista, mentre butfirst restituisce la coda della lista. È presente anche l'operatore last che restituisce l'ultimo elemento. Gli elementi dentro le liste non vengono in nessun modo interpretati. Per questo motivo la lista [1+2] è una lista contenente i tre elementi 1, + e 2 e non la lista formata dall'unico elemento 3.
Questa scelta non è un problema perché è possibile aggiungere un nuovo elemento (intero, word o booleano) in testa alle liste grazie all'operatore push (che prende un elemento e una lista e restituisce una lista) ed è possibile unire due liste con l'operatore concat che restituisce l'append di due liste.
Un'espressione di tipo lista può essere quindi una lista specificata tra parentesi quadre, una variabile contenente una lista, oppure una lista ottenuta dai seguenti operatori:
In LOGO una word è, in pratica, una stringa che non contiene spazi. Le stringhe con spazi sono sostituite da liste.
Una word si indica aprendo i doppi apici ma senza chiuderli (es. "stringa). Questa notazione è possibile perché le stringhe non contengono spazi.
Sulle word è possibile usare gli operatori first, butfirst e last che operano sulla stringa vista come lista di caratteri. Inoltre è possibile ottenere una word usando gli operatori first e last su una lista, nel caso che l'elemento non sia un intero.
Un'espressione booleana è data dai valori di verità true e false, dalle relazioni tra numeri interi =,<,<=,>,>=,!= , dall'operatore empty applicato a una lista. Le espressioni booleane si possono combinare con gli operatori and, or e not. Naturalmente sono presenti anche le forme italiane che sono rispettivamente vero, falso, vuota, e, o, non oltre alla variante emptyp per empty.