Thực Hành Ngôn Ngữ Lập Trình ĐH Bách Khoa TP.HCM

34 416 0
Thực Hành Ngôn Ngữ Lập Trình ĐH Bách Khoa TP.HCM

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

BK Thực hành Ngơn ngữ lập trình TP.HCM Nguyễn Thị Trúc Viên Khoa Công Nghệ Thông Tin Đại Học Bách Khoa TPHCM BK Nội dung TP.HCM Các loại Ngôn ngữ lập trình Lập trình hàm với Lisp: GcLisp Lập trình logic với Prolog: B_Prolog Lập trình hướng đối tượng với SmallTalk: Vwin Nguyễn Thị Trúc Viên Ngơn ngữ lập trình Lisp Slide 2/67 BK Lịch sử phát triển TP.HCM Nghĩ năm 1958 John McCarthy (MIT) Hai hệ đời sau đó: MacLisp InterLisp Franz-Lisp Zeta-Lisp Đầu thập niên 80, có 12 hệ Lisp khác Common Lisp chuẩn đời năm 1984 Nguyễn Thị Trúc Viên BK Ngơn ngữ lập trình Lisp Slide 3/67 Lisp – Các ứng dụng TP.HCM Expert problem solvers Common reasoning Learning Natural-language interfaces Education and intelligent support systems Speech and vision Nguyễn Thị Trúc Viên Ngôn ngữ lập trình Lisp Slide 4/67 BK Ngơn ngữ hướng chức TP.HCM Từ John McCarthy (MIT) nghĩ năm 1958, LISP tinh chế dần đến version 1.5 sử sụng lâu dài sau Ngôn ngữ hướng chức (functional language), dùng ký hiệu tiền tố (prefix): f(x,y, z) x+y Bt: Nguyễn Thị Trúc Viên BK ký hiệu (f x y z) ký hiệu (+ x y) π  sin  x +  ký hiệu ? 2  Ngôn ngữ lập trình Lisp Slide 5/67 Giải đáp tập TP.HCM (sin (+ (* x) (/ pi 2))) Nguyễn Thị Trúc Viên Ngơn ngữ lập trình Lisp Slide 6/67 BK Ngôn ngữ thông dịch TP.HCM Ngôn ngữ biên dịch Ngôn ngữ thông dịch câu lệnh (instructions) Biểu thức biên dịch đánh giá trả lời chương trình thực thi Kết thực thi kết Nguyễn Thị Trúc Viên BK vịng lặp top-level Ngơn ngữ lập trình Lisp Slide 7/67 List Processing (1) TP.HCM Lisp ngôn ngữ đặc trưng cho việc xử lý danh sách Biểu diễn chương trình danh sách thao tác liệu (+ (* 4) (- 2)) chương trình: hàm + áp dụng vào hai đối số liệu: danh sách gồm ba thành phần Nguyễn Thị Trúc Viên Ngơn ngữ lập trình Lisp Slide 8/67 BK List Processing (2) TP.HCM Ví dụ: * (+ 4) * (+ (* 4) (- 2)) 15 *4 Nguyễn Thị Trúc Viên BK Ngôn ngữ lập trình Lisp Slide 9/67 List Processing (3) TP.HCM Danh sách thực hàm * (+ 4) ; danh sách đánh giá Để không đánh giá danh sách, dùng dấu ‘ đặt trước danh sách * ‘(+ 4) (+ 4) Nguyễn Thị Trúc Viên Ngơn ngữ lập trình Lisp Slide 10/67 BK Symbol (1) TP.HCM Symbol (~ identifier): từ tạo ký tự bất kỳ, ngoại trừ ( ) ‘ ` “ ; khoảng trắng Ví dụ: + * example symbol Ba trường hợp thường sử dụng: Tên hàm Dữ liệu: chuỗi ký tự hay số Tên biến Nguyễn Thị Trúc Viên BK Ngôn ngữ lập trình Lisp Slide 11/67 Symbol (2) TP.HCM Với vai trị đối số hàm, symbol xem tên biến * example Unbound variable: EXAMPLE * (setf example 3) * (+ example 4) Để không đánh giá symbol, dùng dấu ‘ đặt trước danh sách * ’example example Nguyễn Thị Trúc Viên Ngôn ngữ lập trình Lisp Slide 12/67 BK Symbol (3) TP.HCM Bài tập: Symbol hay số ? AARDVARD 87 1-2-3-GO 3.12 7-11 22/7 -12 Nguyễn Thị Trúc Viên BK Ngôn ngữ lập trình Lisp Slide 13/67 Symbol (4) TP.HCM Giải tập AARDVARD 87 1-2-3-GO 3.12 7-11 22/7 12 Nguyễn Thị Trúc Viên symbol number symbol number symbol symbol number Ngôn ngữ lập trình Lisp Slide 14/67 BK Boolean TP.HCM Lisp khơng có kiểu liệu Boolean nil biểu diễn giá trị logic sai, tất biểu thức khác biểu diễn trị logic Mặc định dùng T → trị logic nil T symbol * nil NIL *T T nil ≈ danh sách rỗng () Nguyễn Thị Trúc Viên BK Ngơn ngữ lập trình Lisp Slide 15/67 Kiểu liệu TP.HCM Symbol (~ identifier): từ tạo ký tự bất kỳ, ngoại trừ ( ) ‘ ` “ ; khoảng trắng Ví dụ: + * example symbol Biểu thức expression::= atom | list Danh sách list::=(expression1 expressionn) Atoms atom::= số|chuỗi ký tự|symbols Boolean T nil Nguyễn Thị Trúc Viên Ngơn ngữ lập trình Lisp Slide 16/67 BK Các loại biểu thức Lisp TP.HCM Các loại biểu thức (expression): Ký hiệu (symbol) Ví dụ: a-symbol Danh sách (list) Ví dụ: (f x y) Literal: Số: 0.42e2 Chuỗi: “a string” Ký tự: ‘c Mảng: ‘(1 3) Ngôn ngữ lập trình Lisp Nguyễn Thị Trúc Viên BK Slide 17/67 Phân cấp liệu TP.HCM expression list atom symbol list Nguyễn Thị Trúc Viên nil number interger Ngôn ngữ lập trình Lisp real Slide 18/67 BK Ngơn ngữ động (dynamic type) TP.HCM Biến khơng có kiểu liệu định sẵn (không khai báo) Cùng biến có nhiều kiểu liệu khác Nguyễn Thị Trúc Viên BK Ngơn ngữ lập trình Lisp Slide 19/67 Ngơn ngữ lập trình Lisp Slide 20/67 Ví dụ TP.HCM * (setf a ‘(1 3)) (1 3) *a (1 3) * (setf a 2) *a Nguyễn Thị Trúc Viên 10 BK Đánh giá biểu thức (Evaluation) TP.HCM ‘Exp cách viết tắt (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)) Nguyễn Thị Trúc Viên BK Ngôn ngữ lập trình Lisp Slide 39/67 Các câu lệnh điều kiện (1) TP.HCM Câu lệnh IF (if E1 E2): Nếu E1 đúng, trả giá trị E2 (if E1 E2 E3): khơng trả 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) Nguyễn Thị Trúc Viên Ngơn ngữ lập trình Lisp Slide 40/67 20 BK Các câu lệnh điều kiện (2.1) TP.HCM Câu lệnh 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 …)) … ) )) Ngơn ngữ lập trình Lisp Nguyễn Thị Trúc Viên BK Slide 41/67 Các câu lệnh điều kiện (2.2) TP.HCM * (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) Nguyễn Thị Trúc Viên Ngơn ngữ lập trình Lisp Slide 42/67 21 BK Các câu lệnh điều kiện (3) TP.HCM Câu lệnh WHEN (when Test E1 En): Nếu Test đúng, thực E1 En trả kết En Ví dụ: * (setf n 3) * (when (numberp n) (setf n 5) (setf l ‘(a b c))) (A B C) Nguyễn Thị Trúc Viên BK Ngơn ngữ lập trình Lisp Slide 43/67 Các trường hợp điều kiện (1.1) TP.HCM Câu lệnh AND (and E1 En) sai Ei sai AND đánh giá từ trái → phải dừng lại gặp đối số sai Nếu đối số đúng, AND trả giá trị đối số cuối Nguyễn Thị Trúc Viên Ngôn ngữ lập trình Lisp Slide 44/67 22 BK Các trường hợp điều kiện (1.2) TP.HCM * (setf n 3) * (and (numberp n) (> n 3) ) NIL * (and (numberp n) (oddp n)) T * (and (numberp n) (oddp n) (1+ n)) Nguyễn Thị Trúc Viên BK Ngôn ngữ lập trình Lisp Slide 45/67 Các trường hợp điều kiện (2.1) TP.HCM Câu lệnh OR (or E1 En) Ei OR đánh giá từ trái → phải dừng lại gặp đối số Nguyễn Thị Trúc Viên Ngơn ngữ lập trình Lisp Slide 46/67 23 BK Các trường hợp điều kiện (2.2) TP.HCM * (setf x ‘a) A *x A * (or (numberp x) (> x 1)) wrong type argument * (or (symbolp x) (list x)) T Nguyễn Thị Trúc Viên BK Ngơn ngữ lập trình Lisp Slide 47/67 Các trường hợp điều kiện (3) TP.HCM Toán tử NOT AND, OR trả giá trị cuối tính NOT đơn giản đổi nonNIL→NIL NIL→T * (not nil) T * (not ‘dog) NIL * (not (symbolp 4.3)) T Nguyễn Thị Trúc Viên Ngơn ngữ lập trình Lisp Slide 48/67 24 BK Các dạng đặc biệt (1) TP.HCM Toán tử PROG1 PROGN (prog1 E1 En) đánh giá biểu thức E1, , En từ trái sang phải kết trả giá trị biểu thức E1 (progn E1 En) đánh giá biểu thức E1, , En từ trái sang phải kết trả giá trị biểu thức En Nguyễn Thị Trúc Viên BK Ngơn ngữ lập trình Lisp Slide 49/67 Các dạng đặc biệt (2) TP.HCM * (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) Nguyễn Thị Trúc Viên Ngôn ngữ lập trình Lisp Slide 50/67 25 BK Biến cục (1) TP.HCM Toán tử let (let ((var1 E1) … (varm Em)) Em+1 … En) Ta gán cho biến giá trị biểu thức tương ứng, sau đánh giá: (progn expm+1 … expn) Ví dụ: * (let ((x (fac 4))) (* x x)) 576 Nguyễn Thị Trúc Viên BK Ngơn ngữ lập trình Lisp Slide 51/67 Biến cục (2) TP.HCM Che phủ biến toàn cục * * * * * (setf x 5) (let ((x 1)) x) x (let ((x 1)) (setf x 2) x) x Nguyễn Thị Trúc Viên Ngôn ngữ lập trình Lisp Slide 52/67 26 BK Biến cục (3) TP.HCM Che phủ đối số hàm * (defun foo(x) (let ((x 1)) x ) ) FOO * (foo 4) Ngơn ngữ lập trình Lisp Nguyễn Thị Trúc Viên BK Slide 53/67 Biến cục (4) TP.HCM Các liên kết thực song song * (defun bar(x) (let ((x 1) (y (1+ x))) y) ) BAR * (bar 4) Nguyễn Thị Trúc Viên Ngôn ngữ lập trình Lisp Slide 54/67 27 BK Cấu trúc lặp TP.HCM DOTIMES Lặp số DOLIST Lặp danh sách Nguyễn Thị Trúc Viên BK Ngơn ngữ lập trình Lisp Slide 55/67 DOTIMES – Hỗ trợ lặp số TP.HCM (dotimes ( ) ) upper-bound-form đánh giá → n count gán số từ → n-1 (n lần) Thân vòng lặp thực n lần, giá trị kết cần tính Nguyễn Thị Trúc Viên Ngơn ngữ lập trình Lisp Slide 56/67 28 BK DOTIMES (2) TP.HCM Ví dụ: Tính lũy thừa mn = m×m× ×m (defun power(m n) (let ((result 1)) (dotimes (count n result) (setf result (* m result)) ) ) ) Nguyễn Thị Trúc Viên BK Ngơn ngữ lập trình Lisp Slide 57/67 DOLIST – Lặp danh sách TP.HCM (dolist ( ) ) list form đánh giá → danh sách a1→an element gán từ a1 → an (n lần) Với giá trị ai, phần thân vòng lặp (body) đánh giá Khơng có result form, DOLIST trả NIL Nguyễn Thị Trúc Viên Ngôn ngữ lập trình Lisp Slide 58/67 29 BK DOLIST (2) TP.HCM Đếm số phần tử số danh sách: (defun collect-number(l) (let ((result 0)) (dolist (e l result) (when (numberp e) (setf result (+ result 1)) ) ) ) ) Nguyễn Thị Trúc Viên BK Ngơn ngữ lập trình Lisp Slide 59/67 Cài đặt Lisp TP.HCM Download GC-Lisp từ trang Web: http://www.dit.hcmut.edu.vn/~nttung Double click để giải nén file zip Extract vào “C:\” Xuất dialog, tạo thư mục “C:\GCLisp” Trả lời OK Nguyễn Thị Trúc Viên Ngơn ngữ lập trình Lisp Slide 60/67 30 BK Startup gclisp TP.HCM Chạy từ file ‘C:\GcLisp\GcLisp.exe’ Nguyễn Thị Trúc Viên BK Ngôn ngữ lập trình Lisp Slide 61/67 Mơi trường GC-LISP TP.HCM Ta thấy cửa sổ GCLISP sau: Nguyễn Thị Trúc Viên Ngôn ngữ lập trình Lisp Slide 62/67 31 BK Một số phím tắt TP.HCM -H -E -E giúp đỡ vào LISP Explorer vào cửa sổ soạn thảo GMACS rời khỏi GMACS trở Lisp load file vào GMACS lưu file lưu file với tên khác Nguyễn Thị Trúc Viên BK Ngơn ngữ lập trình Lisp Slide 63/67 Dòng lệnh TP.HCM Gõ thử lệnh sau: Nguyễn Thị Trúc Viên Ngơn ngữ lập trình Lisp Slide 64/67 32 BK GMAC editor window TP.HCM Nhấn -E để vào trình soạn thảo để lưu file and trở lại GcLisp Nguyễn Thị Trúc Viên BK Ngôn ngữ lập trình Lisp Slide 65/67 Load file vào GcLisp TP.HCM Load file “first.lsp” * (load ‘first) Nguyễn Thị Trúc Viên Ngơn ngữ lập trình Lisp Slide 66/67 33 BK DEBUG TP.HCM Nguyễn Thị Trúc Viên Ngơn ngữ lập trình Lisp Slide 67/67 34 ... Ngơn ngữ lập trình Lisp Slide 5/67 Giải đáp tập TP.HCM (sin (+ (* x) (/ pi 2))) Nguyễn Thị Trúc Viên Ngôn ngữ lập trình Lisp Slide 6/67 BK Ngơn ngữ thông dịch TP.HCM Ngôn ngữ biên dịch Ngôn ngữ. .. Trúc Viên BK Ngôn ngữ lập trình Lisp Slide 65/67 Load file vào GcLisp TP.HCM Load file “first.lsp” * (load ‘first) Nguyễn Thị Trúc Viên Ngôn ngữ lập trình Lisp Slide 66/67 33 BK DEBUG TP.HCM Nguyễn... second Ngơn ngữ lập trình Lisp Slide 23/67 Các hàm TP.HCM Gán: setf setq Các phép tính số học +, –, *, /, \\ 1+ 1max, abs Nguyễn Thị Trúc Viên Ngôn ngữ lập trình Lisp Slide 24/67 12 BK Ví dụ TP.HCM

Ngày đăng: 30/10/2015, 17:40

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan