Obbiettivo

Lo scopo di questa documentazione quello di installare e configurare un ambiente integrato e completamente personalizzabile per la programmazione PROLOG. L'ambiente basato sull'editor Emacs (chiamarlo editor forse un po' limitativo) e sul compilatore/interprete PROLOG SICStus. Questo tutorial l'ho creato utilizzando Emacs 21.1 e SICStus 3.8.2 su sistema operativo Windows XP professional ed. ma facilmente adattabile ad altre piattaforme e versioni.

Prerequisiti

  1. Installazione di Emacs

    - Download del file emacs-XX.X-bin-i386.tar.gz (12Mb circa) ftp://ftp.gnu.org/gnu/windows/emacs/ (in caso di congestione meglio cercare in un sito FTP mirror)
    - Scompattare il file nella cartella di installazione definitiva
    - Eseguire il programma bin/addpm.exe per completare l'installazione e creare i collegamenti nel men di avvio

  2. Installazione di SICStus

    - Scaricare ed installare il pacchetto autoestraente dal sito del corso di linguaggi simbolici

Configurazione

Per prima cosa compiliamo i file lisp gi presenti in SICStus per comunicare con Emacs:
  1. Eseguiamo Emacs
    (il simbolo M-x corrisponde alla combinazione di tasti Alt-X)
  2. M-x byte-compile-file [invio] c:/Programmi/SICStus Prolog/emacs/pltrace.el [invio]
  3. M-x byte-compile-file [invio] c:/Programmi/SICStus Prolog/emacs/prolog.el [invio]
  4. M-x byte-compile-file [invio] c:/Programmi/SICStus Prolog/emacs/sicstus-support.el [invio]
    (modificare c:/Programmi/SICStus Prolog con la corretta directory di installazione; si puo' utilizzare l'autocoposizione mediante il tasto [TAB])
Settare le seguenti variabili di ambiente (per sist.op. Win NT/2000/XP: Pannello di controllo->Sistema->Avanzate->Variabili d'ambiente)
  1. HOME -> La vostra home directory preferita (ad es. c:/home)
  2. EPROLOG -> C:\Programmi\SICStus Prolog\bin\sicstus.exe (impostate la directory giusta)
  3. INFOPATH -> C:\Programmi\SICStus Prolog\doc\info (impostate la directory giusta)
Crea (nella tu directory settata con HOME) ed edita il file _emacs aggiungendo:
(global-font-lock-mode t) ; GNU Emacs
(setq font-lock-maximum-decoration t)
(setq load-path (cons (expand-file-name "C:/Programmi/SICStus Prolog/emacs") load-path))
(autoload 'run-prolog "prolog" "Start a Prolog sub-process." t)
(autoload 'prolog-mode "prolog" "Major mode for editing Prolog programs." t)
(setq prolog-use-sicstus-sd t)
(setq prolog-align-comments-flag t)
(setq prolog-indent-width 3)
(setq prolog-electric-dot-flag t)
(setq prolog-electric-underscore-flag t)
(setq auto-mode-alist (cons '("\\.pl$" . prolog-mode) auto-mode-alist))
(Ricordarsi di editare la terza riga inserendo la directory corretta)

Utilizzo

Se si fanno programmi su piu' moduli e' utile iniziare i file con:
%%% -*- Mode: Prolog; Module: ModuleName; -*-


Per avere il Source level debugging durante i trace dei programmi:
(men di Emacs con un file prolog aperto) -> Prolog -> Source level debugging -> Active


Finalmente, per vedere girare SICStus dentro Emacs: (C-c equivale a [CTRL-c], C-u a [CTRL-u])
C-c [invio]		per lanciarlo
C-u C-c [invio]		per riavviarlo


Infine una serie di comandi emacs utili.
C-c C-f	       Consult file
C-c C-b	       Consult buffer
C-c C-r	       Consult region
C-c C-p	       Consult predicate
C-c C-c f      Compile file
C-c C-c	b      Compile buffer
C-c C-c	r      Compile region
C-c C-c	p      Compile predicate

M-n	       Go to the next clause.
M-p	       Go to the previous clause.
M-a	       Go to beginning of clause.
M-e	       Go to end of clause.
M-C-c	       Mark clause.
M-C-a	       Go to beginning of predicate.
M-C-e	       Go to end of predicate.
M-C-h	       Mark predicate.
M-{	       Go to the previous paragraph (i.e. empty line).
M-}	       Go to the next paragraph (i.e. empty line).
M-h	       Mark paragraph.
M-C-n	       Go to matching right parenthesis.
M-C-p	       Go to matching left parenthesis.
M-;	       Crea un commento a comment-column
C-c C-t	       Enable tracing
C-u C-c C-t    Disable tracing

C-c C-d	       disable debugging
C-u C-c C-d    enable debugging
C-c C-z	       enable zipping
C-u C-c C-z    disable zipping
C-x SPC	       set a line breakpoint
C-u C-x SPC    remove a line breakpoint
C-c C-s	       Insert the PredSpec of the current predicate into the code.
C-c C-n	       Insert the name of the current predicate into the code.
C-c C-v a      Convert all variables in a region to anonymous variables.
C-c ?	       Help on predicate.



Filippo Vitale (filippo@aev.net) - 2 Gennaio 2002 (versione 1.0)