You are on page 1of 34

BK

TP.HCM

Thc hnh Ngn ng lp trnh


Nguyn Th Trc Vin Khoa Cng Ngh Thng Tin i Hc Bch Khoa TPHCM

BK
TP.HCM

Ni dung
Cc loi Ngn ng lp trnh Lp trnh hm vi Lisp: GcLisp Lp trnh logic vi Prolog: B_Prolog Lp trnh hng i tng vi SmallTalk: Vwin

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 2/67

BK
TP.HCM

Lch s pht trin


Ngh ra nm 1958 bi John McCarthy (MIT) Hai th h u tin ra i ngay sau : MacLisp v InterLisp Franz-Lisp Zeta-Lisp u thp nin 80, c 12 h Lisp khc nhau Common Lisp chun ra i nm 1984

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 3/67

BK
TP.HCM

Lisp Cc ng dng
Expert problem solvers Common reasoning Learning Natural-language interfaces Education and intelligent support systems Speech and vision

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 4/67

BK
TP.HCM

Ngn ng hng chc nng


T khi c John McCarthy (MIT) ngh ra nm 1958, LISP c tinh ch dn n version 1.5 v c s sng lu di v sau Ngn ng hng chc nng (functional language), dng k hiu tin t (prefix):
f(x,y, z) x+y k hiu l (f x y z) k hiu l (+ x y)

Bt:
Nguyn Th Trc Vin

sin 3 x + k hiu ra sao ? 2


Ngn ng lp trnh Lisp Slide 5/67

BK
TP.HCM

Gii p bi tp
(sin (+ (* 3 x) (/ pi 2)))

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 6/67

BK
TP.HCM

Ngn ng thng dch


Ngn ng bin dch Ngn ng thng dch
cu lnh (instructions) Biu thc

bin dch
chng trnh thc thi

nh gi tr li
Kt qu vng lp top-level

thc thi
kt qu

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 7/67

BK
TP.HCM

List Processing (1)


Lisp l ngn ng c trng cho vic x l danh sch Biu din chng trnh bng cc danh sch v thao tc trn nh d liu (+ (* 3 4) (- 5 2))
chng trnh: hm + p dng vo hai i s d liu: danh sch gm ba thnh phn

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 8/67

BK
TP.HCM

List Processing (2)


V d:
* (+ 3 4) 7 * (+ (* 3 4) (- 5 2)) 15 *4 4

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 9/67

BK
TP.HCM

List Processing (3)


Danh sch l s thc hin mt hm
* (+ 3 4) ; danh sch c nh gi 7

khng nh gi mt danh sch, dng du t trc danh sch


* (+ 3 4) (+ 3 4)

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 10/67

BK
TP.HCM

Symbol (1)
Symbol (~ identifier): t to bi cc k t bt k, ngoi tr ( ) ` ; v khong trng
V d: + * example l cc symbol

Ba trng hp thng s dng:


Tn hm D liu: chui k t hay s Tn bin
Nguyn Th Trc Vin Ngn ng lp trnh Lisp Slide 11/67

BK
TP.HCM

Symbol (2)
Vi vai tr l i s trong hm, symbol c xem nh tn ca mt bin
* example Unbound variable: EXAMPLE * (setf example 3) 3 * (+ example 4) 7

khng nh gi mt symbol, dng du t trc danh sch


* example example
Nguyn Th Trc Vin Ngn ng lp trnh Lisp Slide 12/67

BK
TP.HCM

Symbol (3)
Bi tp: Symbol hay s ?
AARDVARD 87 1-2-3-GO 3.12 7-11 22/7 -12

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 13/67

BK
TP.HCM

Symbol (4)
Gii bi tp
AARDVARD 87 1-2-3-GO 3.12 7-11 22/7 12 symbol number symbol number symbol symbol number
Ngn ng lp trnh Lisp Slide 14/67

Nguyn Th Trc Vin

BK
TP.HCM

Boolean
Lisp khng c kiu d liu Boolean
nil biu din gi tr logic sai, tt c cc biu thc khc biu din tr logic ng Mc nh dng T tr logic ng

nil v T l cc symbol hng


* nil NIL *T T

nil danh sch rng ()


Nguyn Th Trc Vin Ngn ng lp trnh Lisp Slide 15/67

BK
TP.HCM

Kiu d liu
Symbol (~ identifier): t to bi cc k t bt k, ngoi tr ( ) ` ; v khong trng V d: + * example l cc symbol Biu thc Danh sch Atoms Boolean expression::= atom | list list::=(expression1...expressionn) atom::= s|chui k t|symbols T v nil

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 16/67

BK
TP.HCM

Cc loi biu thc trong Lisp


Cc loi biu thc (expression):
K hiu (symbol). V d: a-symbol Danh sch (list). V d: (f x y) Literal:
S: 0.42e2 Chui: a string K t: c Mng: (1 2 3)

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 17/67

BK
TP.HCM

Phn cp d liu
expression

list

atom

symbol

number

...

list

nil

...

interger

real

...

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 18/67

BK
TP.HCM

Ngn ng ng (dynamic type)


Bin khng c kiu d liu nh sn (khng khai bo) Cng mt bin c th c nhiu kiu d liu khc nhau

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 19/67

BK
TP.HCM

V d
* (setf a (1 2 3)) (1 2 3) *a (1 2 3) * (setf a 2) 2 *a 2

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 20/67

10

BK
TP.HCM

Cc v t kiu
(numberp E) tr v ng nu E l s (stringp E) (listp E) (null E) (atom E) chui danh sch nil atom

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 21/67

BK
TP.HCM

Cc v t kiu
* (numberp 4) T * (numberp 3.45) T * (symbolp ListProcessor) T * (listp (a b c)) T

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 22/67

11

BK
TP.HCM

Cc v t trn s
ZEROP PLUSP MINUSP ODDP EVENP < > = kim tra zero kim tra s dng kim tra s m kim tra s l kim tra s chn so snh first < second so snh first > second so snh first = second
Ngn ng lp trnh Lisp Slide 23/67

Nguyn Th Trc Vin

BK
TP.HCM

Cc hm c bn
Gn: setf v setq Cc php tnh s hc
+, , *, /, \\ 1+ v 1max, min v abs

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 24/67

12

BK
TP.HCM

V d
* (setf x 27) 1.111 * (/ x 9) 3 * (/ 22 7) 3.14286 * (max 3 4 5) 5 * (abs -2) 2

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 25/67

BK
TP.HCM

Cc hm so snh (1)
Cc php so snh
= eq eql equal hai i s cng l mt s hai i s cng l mt symbol hai i s cng l mt symbol hay cng mt s hai i s c cng biu thc biu din

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 26/67

13

BK
TP.HCM

Cc hm so snh (2)
eq kim tra cng a ch b nh (cc symbol
ging nhau tha iu ny).

eql kim tra tha eq hay khng. Nu khng,


kim tra l hai s cng kiu v cng gi tr.

equal kim tra tha eql hay khng. Nu


khng, xem i s l hai danh sch v xem tng cp phn t c tha equal.

= kim tra hai i s cng l mt s (c th


khng cng kiu)
Nguyn Th Trc Vin Ngn ng lp trnh Lisp Slide 27/67

BK
TP.HCM

V d (1)
* (setf k (a b) l (a b)) (A B) * (equal k l) T * (eq k l) NIL * (eql k l) NIL

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 28/67

14

BK
TP.HCM

V d (2)
* (setf x a y a) A * (equal x y) T * (eq x y) T * (eql x y) T

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 29/67

BK
TP.HCM

V d (3)
* (eq 3 3) T * (eql 3 3.0) NIL * (= 3 3) T * (= 3 3.0) T

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 30/67

15

BK
TP.HCM

Cc hm x l trn danh sch (1)


FIRST v REST CAR v CDR CONS, APPEND, LIST NTHCDR, BUTLAST v LAST LENGTH v REVERSE

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 31/67

BK
TP.HCM

Cc hm x l trn danh sch (2)


* (setf l (a b c d e) k (f g h)) (F G H) * (first l) A * (rest l) (B C D E) * (cons f l) (F A B C D E) * (list a b c) (A B C)

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 32/67

16

BK
TP.HCM

Cc hm x l trn danh sch (3)


* (nthcdr 2 l) (C D E) *l (A B C D E) * (butlast l 2) (A B C) * (last l) (E) * (reverse l) (E D C B A)

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 33/67

BK
TP.HCM

Ton t ASSOC (1)


Gn vi mt danh sch association list hay a-list
Key Key

(setf sarah ((height .54) (weight 4.4)))

Value
Nguyn Th Trc Vin Ngn ng lp trnh Lisp

Value
Slide 34/67

17

BK
TP.HCM

ASSOC (2)
Ly cc thnh phn t mt danh sch:
(ASSOC <key> <asociation list>) V d:
* (setf sarah ((height .54) (weight 4.4))) ((HEIGHT 0.54) (WEIGHT 4.4)) * (assoc weight sarah) (WEIGHT 4.4)

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 35/67

BK
TP.HCM

ASSOC (3)
Thm mt thnh phn mi vo danh sch:
(ACONS <key><value><asociation list>)

V d:
* (setf Andrew ((height .74) (weight 6.4))) ((HEIGHT 0.74) (WEIGHT 6.4)) * (acons nick Bobby Andrew) ((NICK . BOBBY) (HEIGHT 0.74) (WEIGHT 6.4))
Nguyn Th Trc Vin Ngn ng lp trnh Lisp Slide 36/67

18

BK
TP.HCM

nh ngha hm
* (defun square (x) (* x x)) SQUARE * (square 3) 9 * (defun abs(x) (if (>= x 0) x (* -1 x) ) ) ABS

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 37/67

BK
TP.HCM

quy trong Lisp


V d: Tnh giai tha:
n!=1*2*...*n 0!=1
(defun fac(n) (if (= n 0) 1 (* n fac (1- n)) ) )

Bi tp: Vit hm in ra phn t th n trong danh sch.


Nguyn Th Trc Vin Ngn ng lp trnh Lisp Slide 38/67

19

BK
TP.HCM

nh gi biu thc (Evaluation)


Exp l cch vit tt ca (quote Exp)
* (setf c a) a

eval >< quote


* (setf l (a b c)) (a b c) * (eval (list car l)) a * (eval (list + (1+ 3) 2)) 6
Nguyn Th Trc Vin Ngn ng lp trnh Lisp Slide 39/67

BK
TP.HCM

Cc cu lnh iu kin (1)


Cu lnh IF
(if E1 E2): Nu E1 ng, tr v gi tr E2 (if E1 E2 E3): .. nu khng tr v gi tr E3 V d:
* (if (numberp 1) (a number) (not a number)) (A NUMBER) * (if (numberp a) (a number) (not a number)) (NOT A NUMBER)

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 40/67

20

BK
TP.HCM

Cc cu lnh iu kin (2.1)


Cu lnh COND
(cond (Test1 E1 ) (Test2 E2 ) (Test3 E3 ) (Testn En ) ) (if Test1 (progn E1 ) (if Test2 (progn E2 ) (if Test3 (progn E3 ) (if Testn (progn En )) ) ))

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 41/67

BK
TP.HCM

Cc cu lnh iu kin (2.2)


* (setf x (a b c)) (A B C) * (cond ((numberp x) (This is a number)) ((symbolp x) (This is a symbol)) ((listp x) (This is a list)) ) (THIS IS A LIST)

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 42/67

21

BK
TP.HCM

Cc cu lnh iu kin (3)


Cu lnh WHEN
(when Test E1 ... En): Nu Test ng, thc hin E1 ... En v tr v kt qu En V d:
* (setf n 3) * (when (numberp n) (setf n 5) (setf l (a b c))) (A B C)

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 43/67

BK
TP.HCM

Cc trng hp iu kin (1.1)


Cu lnh AND
(and E1 ... En) sai nu t nht mt Ei sai AND nh gi t tri phi v dng li khi gp i s sai Nu mi i s u ng, AND tr v gi tr ca i s cui cng

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 44/67

22

BK
TP.HCM

Cc trng hp iu kin (1.2)


* (setf n 3) 3 * (and (numberp n) (> n 3) ) NIL * (and (numberp n) (oddp n)) T * (and (numberp n) (oddp n) (1+ n)) 4

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 45/67

BK
TP.HCM

Cc trng hp iu kin (2.1)


Cu lnh OR
(or E1 ... En) ng nu t nht mt Ei ng OR nh gi t tri phi v dng li khi gp i s ng

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 46/67

23

BK
TP.HCM

Cc trng hp iu kin (2.2)


* (setf x a) A *x A * (or (numberp x) (> x 1)) wrong type argument * (or (symbolp x) (list x)) T

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 47/67

BK
TP.HCM

Cc trng hp iu kin (3)


Ton t NOT
AND, OR tr v gi tr cui cng tnh c NOT n gin i nonNILNIL v NILT
* (not nil) T * (not dog) NIL * (not (symbolp 4.3)) T

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 48/67

24

BK
TP.HCM

Cc dng c bit (1)


Ton t PROG1 v PROGN
(prog1 E1 ... En) nh gi tun t cc biu thc E1, ..., En t tri sang phi v kt qu tr v l gi tr ca biu thc E1 (progn E1 ... En) nh gi tun t cc biu thc E1, ..., En t tri sang phi v kt qu tr v l gi tr ca biu thc En

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 49/67

BK
TP.HCM

Cc dng c bit (2)


* (progn (setf x (a b c)) (append x x) ) (A B C A B C) *x (A B C) * (prog1 (setf x (a b c)) (append x x) ) (A B C)

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 50/67

25

BK
TP.HCM

Bin cc b (1)
Ton t let
(let ((var1 E1) (varm Em)) Em+1 En)

Ta gn cho mi bin gi tr ca biu thc tng ng, sau nh gi:


(progn expm+1 expn)

V d:
* (let ((x (fac 4))) (* x x)) 576
Nguyn Th Trc Vin Ngn ng lp trnh Lisp Slide 51/67

BK
TP.HCM

Bin cc b (2)
Che ph cc bin ton cc
* 5 * 1 * 5 * 2 * 5 (setf x 5) (let ((x 1)) x) x (let ((x 1)) (setf x 2) x) x
Ngn ng lp trnh Lisp

Nguyn Th Trc Vin

Slide 52/67

26

BK
TP.HCM

Bin cc b (3)
Che ph cc i s ca mt hm
* (defun foo(x) (let ((x 1)) x ) ) FOO * (foo 4) 1

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 53/67

BK
TP.HCM

Bin cc b (4)
Cc lin kt c thc hin song song
* (defun bar(x) (let ((x 1) (y (1+ x))) y) ) BAR * (bar 4) 5

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 54/67

27

BK
TP.HCM

Cu trc lp
DOTIMES
Lp trn s

DOLIST
Lp trn danh sch

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 55/67

BK
TP.HCM

DOTIMES H tr lp trn s
(dotimes (<count> <upper-bound-form> <result form>) <body>)

upper-bound-form c nh gi n. count c gn cc s t 0 n-1 (n ln) Thn vng lp <body> c thc hin n ln,
gi tr ca <result form> l kt qu cn tnh.
Nguyn Th Trc Vin Ngn ng lp trnh Lisp Slide 56/67

28

BK
TP.HCM

DOTIMES (2)
V d: Tnh ly tha mn = mm.. m
(defun power(m n) (let ((result 1)) (dotimes (count n result) (setf result (* m result)) ) ) )

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 57/67

BK
TP.HCM

DOLIST Lp trn danh sch


(dolist (<element parameter > <list form> <result form>) <body>)

list form c nh gi danh sch a1an element c gn t a1 an (n ln)


Vi mi gi tr ai, phn thn vng lp (body) c nh gi. Khng c result form, DOLIST s tr v NIL
Nguyn Th Trc Vin Ngn ng lp trnh Lisp Slide 58/67

29

BK
TP.HCM

DOLIST (2)
m s phn t l s trong danh sch:
(defun collect-number(l) (let ((result 0)) (dolist (e l result) (when (numberp e) (setf result (+ result 1)) ) ) ) )

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 59/67

BK
TP.HCM

Ci t Lisp
Download GC-Lisp t trang Web:
http://www.dit.hcmut.edu.vn/~nttung

Double click gii nn file zip Extract vo C:\ Xut hin dialog, to th mc C:\GCLisp Tr li OK

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 60/67

30

BK
TP.HCM

Startup gclisp
Chy t file C:\GcLisp\GcLisp.exe

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 61/67

BK
TP.HCM

Mi trng GC-LISP
Ta thy ca s GCLISP nh sau:

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 62/67

31

BK
TP.HCM

Mt s phm tt
<Alt>-H <Alt>-E <Ctrl>-E <F1> <F8> <F9> <F10> gip vo LISP Explorer vo ca s son tho GMACS ri khi GMACS v tr v Lisp load mt file vo GMACS lu mt file lu file vi tn khc
Ngn ng lp trnh Lisp Slide 63/67

Nguyn Th Trc Vin

BK
TP.HCM

Dng lnh
G th cc lnh sau:

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 64/67

32

BK
TP.HCM

GMAC editor window


Nhn <Ctrl>-E vo trnh son tho

<F9> lu file and <F1> tr li GcLisp


Nguyn Th Trc Vin Ngn ng lp trnh Lisp Slide 65/67

BK
TP.HCM

Load file vo GcLisp


Load file first.lsp
* (load first)

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 66/67

33

BK
TP.HCM

DEBUG

Nguyn Th Trc Vin

Ngn ng lp trnh Lisp

Slide 67/67

34

You might also like