Funktionell programmering
Vad ska jag göra?
Syftet med denna laboration är att ge komma-igång-hjälp. Det är inget
du behöver lämna in från labben. I stället rekommenderar vi att du
börjar arbeta med den första
inlämningsuppgiften, så snart du har lärt dig "hantverket" att
"köra Lisp".
Laborationen är inte obligatorisk. Detta är dock det enda tillfälle
när du är välkommen att ställa "handhavandefrågor". Frågor kring
resonemang, programlogik, teori, begrepp mm är naturligtvis välkomna både nu och senare.
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)) |
Se till att du intenderar rätt Använd TAB för att intendera
|
- 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
Information Technology mobile + 46 (70) 425 02 11
Department of Computer Systems fax, dept + 46 (18) 55 02 25
P.O. Box 325
S-751 05 Uppsala
Sweden
e-mail: Anders.Berglund@docs.uu.se