Funktionell programmering
Att komma igång
Det är enkelt att köra Lisp är under emacs. I ett sådant
arrangemang kan du direkt från editorn emacs skicka lisp-uttryck till
en Lisp och få direkt få tillbaka resultatet.
Starta så här: i precis den ordning som anges
- Om du inte redan sitter vid en Sun, koppla upp dig till en sådan, och skriv eventuellt setenv TERM vt100.Om du kan ha en skärm som är högre än 24 rader, bör du skriva stty rows x
- Starta emacs
- Starta en underliggande Lisp i emacs med kommandot M-x run-lisp
Som du vet står M-x för meta-x, och skrivs som ESC följt av x.
Du kan använda TAB, när namnet är skrivet så långt
att det är unikt.
- Om inte en Lisp startar (om allt fungerar är texten i *inferior-lisp*),
upprepa
M-x run-lisp
- Dela ditt Lisp-fönster i två C-x 2
. Att C-x står för kontroll-x är väl uppenbart
- Öppna en fil (C-x C-f)
med extension .lisp
, exempelvis kaka.lisp
, i ett av fönstren,
förslagsvis det övre. Du byter fönster med C-x O
(bokstaven O)
- Skriv in en liten funktion exempelvis
(defun plus1(x)
(+ x 1))
- Evaluera funktionen (dvs "skicka" den till Lispen) genom att ställa
markören någonstans i funktionskoden och skriva C-c C-e
. Funktionsnamnet
visas nu i inferior-lisp-fönstret, vilket visar att funktionen
definierats.
- Skriv ett litet anrop till funktionen i kod-fönstret, exempelvis
(plus1 6)
Ställ markören i anropet och skicka det till lispen med C-c C-e
- Du ser resultatet i Lispfönstret.
När (Om?)du gör fel
- Om du får ett felmeddelande från Lispen: Läs meddelandet.
Svara i lispfönstret
- Om du vill definiera om en funktion: Skicka den till Lispen igen. Den
nya funktionsdefinitionen ersätter den gamla.
- Om du trasslar in dig i Emacs: C-g
ett par gånger brukar lösa
alla problem. C-l
skriver om bildskärmen.
Några Emacs-kommandon i Lispmode
Vanliga emacs-kommandon i lispmode finns nedan.
TAB lisp-indent-line
DEL backward-delete-char-untabify
C-x C-e lisp-eval-last-sexp
C-c C-v lisp-show-variable-documentation
C-c C-f lisp-show-function-documentation
C-c C-d lisp-describe-sym
C-c C-a lisp-show-arglist
C-c C-k lisp-compile-fileg
C-c C-l lisp-load-file
C-c C-c lisp-compile-defun
C-c C-r lisp-eval-region
C-c C-e lisp-eval-defun
C-c C-z switch-to-lisp
ESC C-x lisp-eval-defun
ESC q lisp-fill-paragraph
ESC C-q indent-sexp
ESC q lisp-fill-paragraph
ESC C-q indent-sexp
Anders Berglund office + 46 (18) 471 31 67
Department of Computer Systems mobile + 46 (70) 425 02 11
P.O. Box 325 fax, direct + 46 (70) 411 02 14
S-751 05 Uppsala fax, dept + 46 (18) 55 02 25
Sweden
e-mail: Anders.Berglund@docs.uu.se