Ticker

6/recent/ticker-posts

Ngôn ngữ lập trình LISP - Tổng quan

 John McCarthy đã phát minh ra LISP vào năm 1958, ngay sau khi FORTRAN phát triển. Nó được thực hiện lần đầu tiên bởi Steve Russell trên máy tính IBM 704.

Nó đặc biệt thích hợp cho các chương trình Trí tuệ nhân tạo, vì nó xử lý thông tin tượng trưng một cách hiệu quả.

Common Lisp bắt nguồn từ những năm 1980 và 1990, với nỗ lực thống nhất công việc của một số nhóm triển khai kế thừa Maclisp, như ZetaLispNIL (New Triển khai Lisp), v.v.

Nó phục vụ như một ngôn ngữ chung, có thể dễ dàng mở rộng để triển khai cụ thể.

Các chương trình được viết bằng Common LISP không phụ thuộc vào các đặc điểm riêng của máy, chẳng hạn như độ dài từ, v.v.

1. Đặc điểm của LISP chung

  • Nó không phụ thuộc vào máy móc
  • Nó sử dụng phương pháp thiết kế lặp đi lặp lại và khả năng mở rộng dễ dàng.
  • Nó cho phép cập nhật động các chương trình.
  • Nó cung cấp gỡ lỗi cấp cao.
  • Nó cung cấp lập trình hướng đối tượng nâng cao.
  • Nó cung cấp một hệ thống vĩ mô thuận tiện.
  • Nó cung cấp nhiều kiểu dữ liệu như, đối tượng, cấu trúc, danh sách, vectơ, mảng có thể điều chỉnh, bảng băm và ký hiệu.
  • Nó dựa trên biểu thức.
  • Nó cung cấp một hệ thống điều kiện hướng đối tượng.
  • Nó cung cấp một thư viện I / O hoàn chỉnh.
  • Nó cung cấp các cấu trúc điều khiển mở rộng.

2. Các ứng dụng được xây dựng trong LISP

Các ứng dụng thành công lớn được xây dựng trong Lisp.

  • Emacs
  • G2
  • AutoCad
  • Igor Engraver
  • Cửa hàng Yahoo
1 đoạn code mẫu Lisp:


(define-condition on-division-by-zero (error)
   ((message :initarg :message :reader message))
)
   
(defun handle-infinity ()
   (restart-case
      (let ((result 0))
         (setf result (division-function 10 0))
         (format t "Value: ~a~%" result)
      )
      (just-continue () nil)
   )
)
     
(defun division-function (value1 value2)
   (restart-case
      (if (/= value2 0)
         (/ value1 value2)
         (error 'on-division-by-zero :message "denominator is zero")
      )

      (return-zero () 0)
      (return-value (r) r)
      (recalc-using (d) (division-function value1 d))
   )
)

(defun high-level-code ()
   (handler-bind
      (
         (on-division-by-zero
            #'(lambda (c)
               (format t "error signaled: ~a~%" (message c))
               (invoke-restart 'return-zero)
            )
         )
         (handle-infinity)
      )
   )
)

(handler-bind
   (
      (on-division-by-zero
         #'(lambda (c)
            (format t "error signaled: ~a~%" (message c))
            (invoke-restart 'return-value 1)
         )
      )
   )
   (handle-infinity)
)

(handler-bind
   (
      (on-division-by-zero
         #'(lambda (c)
            (format t "error signaled: ~a~%" (message c))
            (invoke-restart 'recalc-using 2)
         )
      )
   )
   (handle-infinity)
)

(handler-bind
   (
      (on-division-by-zero
         #'(lambda (c)
            (format t "error signaled: ~a~%" (message c))
            (invoke-restart 'just-continue)
         )
      )
   )
   (handle-infinity)
)

(format t "Done."))

Đăng nhận xét

0 Nhận xét