Presentation laddar. Vänta.

Presentation laddar. Vänta.

LISP-anteckningar Av Jörgen Sigvardsson. LISP – Del 1 Introduktion till LISP.

Liknande presentationer


En presentation över ämnet: "LISP-anteckningar Av Jörgen Sigvardsson. LISP – Del 1 Introduktion till LISP."— Presentationens avskrift:

1 LISP-anteckningar Av Jörgen Sigvardsson

2 LISP – Del 1 Introduktion till LISP

3 Agenda LISP? Vanliga programspråkselement

4 LISP = LISt Processing LISP MacLisp ~ 1970 Multipla argument Exceptions Lisp Machine ~ 75 Scheme InterLisp ~ 1975 Inte längre bara prog. språk Även en komplett miljö (GUI m.m) LSD? ;-) Lexikalisk scoping Bättre koppling till teori Smalltalk (OO!) CommonLisp - 86 CLOS – 198? ? OO

5 Syntax Program ::= { Form 1 } * Form ::= ’(’ { Form } + ’)’ | Konstant Konstant ::= Lista | Atom Lista ::= ’(’ { Konstant } + ’)’ Atom ::= Tal | Sträng |... | Symbol 1 Eng. Form, översätts till Formulär? EG(1)

6 Formulär (Eng. Forms) vänster  höger, in  ut (* (+ 1 2) (- 4 3)) = (* 3 (- 4 3)) = (* 3 1) = 3 Alla uttryck normaliseras alltid till ett ”värde” med undantag för några få... (if, cond, etc.)

7 Värdeformer carcdr Cons ? Atom+=Listor carcdrcarcdrcarcdrØ ??? EG(2) ??

8 Typer Standardtyper Heltal, flyttal, bråktal Strängar Arrayer Listor (doh!) Egendefinierade typer Strukturer (C/C++ struct-liknande) EG(3)

9 Input och Output Två språk Ett input-språk (följer syntax) Ett output-språk (följer egna regler)

10 Tilldelning (setf var-name 1 value 1 var-name 2 value 2... var-name n value n ) EG(4)

11 Sekvens (prog1 expr 1 expr 2... expr n ) (progn expr 1 expr 2... expr n ) I Scheme heter progn begin EG(5)

12 Predikat Sant: T el. ¬ Falskt, Falskt: NIL Typtest: typp – predikat för typen typ Ekvivalenstest: eq, eql, equal, =, /= Relationstest:, >=,... Listpredikat: null & endp Logiska predikat: and, or, not EG(6)

13 Selektion (if bool-expr then-form else-form) (when bool-expr then-form) (unless bool-expr else-form) (cond (test 1 then-form 1 ) (test 2 then-form 2 )... (test n then-form n ) (t default-form)) EG(7)

14 Selektion (forts.) (case key-expr (key 1 then-form 1 ) (key 2 then-form 2 )... (key n then-form n ) (otherwise else-form)) EG(7)

15 Scoping Dynamisk VARNING! KAN MEDFÖRA HJÄRNSKADOR! Lexikalisk Globalt scope Lokala scopes Funktioner

16 Lokala scopes (let((name 1 val 1 )... (name n val n )) body-expr 1... body-expr n ) (let*((name 1 val 1 )... (name n val n )) body-expr 1... body-expr n ) EG(8)

17 Speciella formulär setf, let, let*, case, cond och några till.. Evalueras olika från vanliga formulär Där vanlig innebär anrop till funktioner

18 Funktioner i LISP LISP = Funktioner + Data 1 Funktioner är förstklassiga värden och behöver därmed ej ha namn bundna Rekursion > Iteration Nya tekniker – tail recursion Varför rekursion? Livet blir lättare! 2 1 Ofta i form av listor EG(9) 2 Se EG(9) minappend t.ex

19 Svansrekursion Definieras av att allt jobb görs på vägen ”ner” i rekursionen EG(9)

20 Operationer? Operationer = Funktioner  Operationer är förstklassiga

21 LISP – Del 2 Fortsättningen

22 Agenda Standardtyper Egendefinierade typer Funktioner ADT’er Listor ADT’er m.h.a listor I/O & Iteration

23 ”4+   i top”-typerna i LISP NUMBER ARRAY STRING CHARACTER Egendefinierade typer (defstruct)

24 Typen NUMBER Urbastyp för alla aritmetiska typer Alla operationer man kan förvänta sig finns (+, -, sqrt, abs, max, etc.) Operationerna är polymorfiska! Number ComplexReal IntegerRational

25 Typen ARRAY Flerdimensionella Om 1 dimension  Vektor Om 2 dimensioner  Matris Direktåtkomst Fullt polymorfiska Operationer: Konstruktörer make-array Inspektörer array-dimension array-rank array-total-size aref Muterare adjust-array Predikat array-in-bounds-p EG(10)

26 Typen STRING Subtyp till ARRAY String har några fler operationer Ekvivalenspredikat samt relationspredikat (se EG(6)) EG(11) Operationer: Konstruktörer make-string Inspektörer length char + alla array-operationer! ARRAY STRING

27 Typen CHARACTER Utgör byggstenar för strängar Syntax: #\ Operationer: Predikat char= char/= char< char> char<= char>=

28 Egna typer - defstruct Konstruktorer Typ-predikat Inspektörer ”Nästan-arv” EG(12)

29 Funktioner med namn (defun name (parameters) form) form bäddas in i ett eget scope scope innehåller: parametrar + namn + namn omslutande scope EG(13)

30 Funktioner utan namn (lambda (parametrar) form) Samma scopingregler som för en defun * EG(14) * Som du kanske redan förstått så har defun ärvt scopingreglerna från lambda!

31 Listor Lista definition 1 List ::= Cons | NIL Cons ::= (Cons | Atom){2} carcdrcarcdrcarcdrØ 123 Lista definition 2 List ::= Head Tail Head ::= List | Atom Tail ::= List | NIL

32 Listor & Operationer Konstruktörer cons, list, append, mapcar Inspektörer car, cdr, cadr, caddr, nthcdr Predikat endp, null, listp, consp (se EG(6)) ”Misc” apply EG(15)

33 Associationslistor AssocLista ::= ({(key value + )} * ) EG(16)

34 ADT’er defstruct bst, stack, avl, graph, etc. Likt C/C++ EG(17)

35 Listor + Regler = ADT (bst...) (graph...) (stack...) (queue...) EG(18)

36 Iteration (do ({(var initval next)} * ) ([end-cond [end-value]] | NIL) body-form) (loop body-form) Naturligt vid I/O-operationer EG(19)

37 I/O – Del 1 (open filename [:direction {:output, :input, :io, :probe}] [:element-type {:default, typnamn}] [:if-exists {:error, :new-version, :rename, :rename-and-delete, :overwrite, :append, :supersede, NIL}] [:if-does-not-exist {:error, :create, NIL}]) (close stream) EG(20)

38 I/O – Del 2 (read-type [input-stream [eof-error-p [eof-value]]] (write-type char [output-stream]) EG(20)

39 I/O – Del 3 (with-open-file (stream-var open-args * ) body-form) * open-args är filnamn + alla flaggor som ges till open EG(20)

40 Summering Du har lärt dig Syntax Grundkonstruktioner såsom if, setf, defun, etc. Mer avancerade konstruktioner lambda, mapcar, etc. Listor – LISP’s hörnsten ADT’er – strukturtyper såväl som listbaserade typer

41 Referenser History of Lisp Historien om CAR & CDR GCL (GNU Common Lisp) ftp://ftp.gnu.org/gnu/ CLISP (An ANSI Common Lisp) (Finns för många platformar) Donalds Lisp-bibliotek Xanalys Common Lisp (Bra implementation för Windows) The Association of Lisp Users Schemers.org (Scheme Lisp) Haskell – A Purely Functional Language


Ladda ner ppt "LISP-anteckningar Av Jörgen Sigvardsson. LISP – Del 1 Introduktion till LISP."

Liknande presentationer


Google-annonser