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

  1. 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
  2. Starta emacs
  3. 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.

  4. Om inte en Lisp startar (om allt fungerar är texten i *inferior-lisp*), upprepa M-x run-lisp
  5. Dela ditt Lisp-fönster i två C-x 2 . Att C-x står för kontroll-x är väl uppenbart
  6. Ö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)
  7. 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
  8. 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.
  9. 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
  10. Du ser resultatet i Lispfönstret.

När (Om?)du gör fel

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