Lisp

Lisp là ngôn ngữ lập trình được phát triển từ rất sớm (1958).

Lisp, viết tắt của LISt Processing có cấu trúc dữ liệu nền tảng là các danh sách liên kết (linked list). Lisp được biết đến như một trong những ngôn ngữ lập trình hàm tiêu biểu, mặc dù đôi khi vẫn có các chương trình Lisp được viết theo hướng thủ tục. Về hình thức, cú pháp lệnh của Lisp rất đặc biệt với những cặp ngoặc đơn và viết theo ký pháp tiền tố.

Lisp
Biểu tượng hình con thằn lằn đôi khi được các lập trình viên dùng trong các chương trình viết bằng ngôn ngữ Lisp.

Lịch sử Lisp

Lisp được John McCarthy đề xuất vào năm 1958 tại MIT. Steve Russell đã chuyển từ ý tưởng sang thực tế trên máy tính. Trình biên dịch Lisp đầu tiên được viết bởi Tim Hart và Mike Levin (1962) bằng chính ngôn ngữ Lisp.

Lisp đã được sử dụng rộng rãi trong lĩnh vực trí tuệ nhân tạo.

Đặc điểm Lisp

  • Cú pháp Lisp thuần nhất (sẽ được trình bày trong phần dưới)
  • Hàm cũng là một đối tượng
  • Lập trình kiểu động.
  • Thu rác trong bộ nhớ (Garbage collector)
  • Gói chương trình
  • Biên dịch tăng dần (Incremental compiling): Trong khi phát triển chương trình có thể sử dụng các hàm được biên dịch cùng với các hàm được thông dịch.

Cú pháp Lisp

  • Lisp có cú pháp thuần nhất. Cấu trúc chung của Lisp là danh sách liên kết biểu thị bởi cặp ngoặc đơn, bên trong là các phần ngăn cách bởi dấu trống (space).

(phần-1 phần-2 phần-3...)

Trong đó mỗi phần có thể là:

Ví dụ:

    • Hàm căn bậc hai: (sqrt 2)
    • Lệnh in ra màn hình: (princ "Common Lisp")
    • Phép tính cộng trong đó hàm là toán tử: (+ 3 5)

Cú pháp Lisp như vậy được gọi chung là biểu thức S (S-expression hay Sexp). Một chương trình Lisp thực ra là một biểu thức S lớn mà mỗi phần của nó gồm nhiều biểu thức S con khác.

Một số cú pháp cụ thể của Lisp như sau:

  • Khai báo hàm(defun tên-hàm (danh-sách-tham-số) (nội-dung-của-hàm))
  • Gán(setq tên-biến giá-trị)
  • Khối lệnh(progn (lệnh-1) (lệnh-2)...)
  • Chọn / rẽ nhánh
    (if (biểu-thức-điều-kiện) (nhánh-đúng) (nhánh-sai))  (cond   ((biểu-thức-1) (nhánh-1))   ((biểu-thức-2) (nhánh-2)) ... ) 
  • Lặp
    (while (điều-kiện)   (lệnh) ) 

Quy ước đặt tên

Trong thư viện chuẩn của Lisp, các hàm dạng logic (predicate) trả lại kết quả đúng (T) hoặc sai (NIL) đều kết thúc với chữ (p). Chẳng hạn: zerop là hàm kiểm tra một số bằng 0 hay không.

Quy ước đặt tên này không bắt buộc, nó có tác dụng với người lập trình (để dễ đọc và tiện gỡ lỗi) nhưng không có ý nghĩa với trình biên dịch.

Hướng đối tượng trong Lisp

Mặc dù được phát triển với định hướng ban đầu là lập trình hàm, ngôn ngữ Lisp cũng được bổ sung các tính năng cho phép lập trình hướng đối tượng. Chẳng hạn với Common Lisp, hướng đối tượng được thể hiện qua CLOS, với các tính năng cơ bản là:

  • Định nghĩa các lớp
  • Tạo các đối tượng trong mỗi lớp
  • Định nghĩa các phương thức và hàm tổng quát.

Một ví dụ cụ thể với việc định nghĩa một lớp person với các giá trị mặc định tên là bill và 10 tuổi như sau:

(defclass person ()   ((name:accessor person-name :initform 'bill :initarg:name)    (age:accessor person-age :initform 10 :initarg:age))) 

Các dòng Lisp

Trong quá trình phát triển, có nhiều dòng Lisp khác nhau như: MacLisp, ZetaLisp, Franz Lisp v.v... Với nguyện vọng thống nhất một chuẩn chung cho Lisp, Common Lisp (CL) đã ra đời. Tuy vậy, hiện nay cũng có nhiều bản của Common Lisp như Allegro CL, LispWork (các phiên bản thương mại), và CMU CL, SBCL (các phiên bản tự do).

Một nhánh phát triển khác của Lisp là Scheme, một ngôn ngữ Lisp rút gọn với vài thay đổi về các từ khóa. Scheme là ngôn ngữ được giảng dạy phổ biến tại Hoa Kỳ. Trường MIT dùng Scheme để dạy sinh viên năm thứ nhất, nhưng đã chuyển qua dùng python.

Ứng dụng của Lisp

Sau khi ra đời, Lisp dần dần trở thành ngôn ngữ chuyên dụng trong ngành trí tuệ nhân tạo ở Hoa Kỳ. Thậm chí ở Hoa Kỳ ảnh hưởng của nó còn lấn át một ngôn ngữ thông dụng khác trong ngành trí tuệ nhân tạo là Prolog. Nghiên cứu trí tuệ nhân tạo bằng Lisp được khái quát thành những bài toán mang tính mẫu mực.

Ngoài ra Lisp còn là công cụ lập trình mạnh mẽ bên trong các chương trình AutoCAD và Emacs, và được sử dụng rộng rãi trong công thương nghiệp.

Xem thêm

Tham khảo

Tags:

Lịch sử LispĐặc điểm LispCú pháp LispHướng đối tượng trong LispCác dòng LispỨng dụng của LispLisp1958Chương trìnhCú pháp họcDanh sách liên kếtLập trình hàmLập trình thủ tụcNgôn ngữ lập trình

🔥 Trending searches on Wiki Tiếng Việt:

Danh sách tỉnh Việt Nam có giáp biểnTô Ân XôSuni Hạ LinhPhạm Đại DươngPhápDanh sách động từ bất quy tắc (tiếng Anh)ĐứcPhú ThọNữ hoàng nước mắtHứa Quang HánĐất rừng phương NamTập đoàn FPTTây NinhĐỗ Hùng ViệtJennifer PanCan ChiCác vị trí trong bóng đáCuộc đua xe đạp toàn quốc tranh Cúp truyền hình Thành phố Hồ Chí MinhKakáHoàng DiệuChữ Quốc ngữTố HữuTrần Thanh MẫnĐông Nam BộTuyên ngôn độc lập (Việt Nam Dân chủ Cộng hòa)Tôi thấy hoa vàng trên cỏ xanhHalogenCảm tình viên (phim truyền hình)Nghệ AnMiduBabyMonsterSố nguyên tốAi CậpThe SympathizerĐài Truyền hình Kỹ thuật số VTCChiến tranh cục bộ (Chiến tranh Việt Nam)Danh sách thành viên của SNH48ZaloNguyễn Trung TrựcĐồng bằng sông HồngBánh mì Việt NamAdolf HitlerDanh sách tỷ phú thế giớiCuộc đua xe đạp toàn quốc tranh Cúp truyền hình Thành phố Hồ Chí Minh 2024Ủy ban Kiểm tra Trung ương Đảng Cộng sản Việt NamHoàng Phủ Ngọc TườngAnhXử Nữ (chiêm tinh)Tây NguyênKinh tế Trung QuốcCúp bóng đá trong nhà châu Á 2022Địa lý Việt NamXXXTour de FranceĐội tuyển bóng đá U-23 quốc gia IraqChâu MỹVăn hóaDanh sách đơn vị hành chính Việt Nam theo GRDP bình quân đầu ngườiSinh sản hữu tínhQuân khu 5, Quân đội nhân dân Việt NamThanh gươm diệt quỷKinh tế ÚcĐài Truyền hình Việt NamZinédine ZidaneNhà LýBảng xếp hạng bóng đá nam FIFAXVideosMặt TrờiMã QRToán họcQuần đảo Trường SaVịnh Hạ LongQSự kiện Thiên An MônA.S. RomaBayer 04 LeverkusenTom và Jerry🡆 More