LISP - Các biến

Trong LISP, mỗi biến được đại diện bởi một symbol. Tên của biến là tên của ký hiệu và nó được lưu trữ trong ô lưu trữ của ký hiệu.

Biến toàn cục

Các biến toàn cục có giá trị vĩnh viễn trong toàn bộ hệ thống LISP và vẫn có hiệu lực cho đến khi một giá trị mới được chỉ định.

Các biến toàn cục thường được khai báo bằng cách sử dụng defvar xây dựng.

Ví dụ

(defvar x 234)
(write x)

Khi bạn nhấp vào nút Execute hoặc gõ Ctrl + E, LISP sẽ thực thi nó ngay lập tức và kết quả trả về là

234

Vì không có khai báo kiểu cho các biến trong LISP, bạn chỉ định trực tiếp giá trị cho một ký hiệu với setq xây dựng.

Ví dụ

->(setq x 10)

Biểu thức trên gán giá trị 10 cho biến x. Bạn có thể tham chiếu đến biến bằng cách sử dụng chính ký hiệu làm biểu thức.

Các symbol-value chức năng cho phép bạn trích xuất giá trị được lưu trữ tại nơi lưu trữ ký hiệu.

Ví dụ

Tạo tệp mã nguồn mới có tên main.lisp và nhập mã sau vào đó.

(setq x 10)
(setq y 20)
(format t "x = ~2d y = ~2d ~%" x y)

(setq x 100)
(setq y 200)
(format t "x = ~2d y = ~2d" x y)

Khi bạn nhấp vào nút Execute hoặc gõ Ctrl + E, LISP sẽ thực thi nó ngay lập tức và kết quả trả về là.

x = 10 y = 20 
x = 100 y = 200

Biến cục bộ

Các biến cục bộ được xác định trong một thủ tục nhất định. Các tham số được đặt tên là đối số trong định nghĩa hàm cũng là các biến cục bộ. Các biến cục bộ chỉ có thể truy cập trong hàm tương ứng.

Giống như các biến toàn cục, các biến cục bộ cũng có thể được tạo bằng cách sử dụng setq xây dựng.

Có hai cấu trúc khác - letprog để tạo các biến cục bộ.

Cấu trúc let có cú pháp sau.

(let ((var1  val1) (var2  val2).. (varn  valn))<s-expressions>)

Trong đó var1, var2, ..varn là tên biến và val1, val2, .. valn là giá trị ban đầu được gán cho các biến tương ứng.

Khi nào letđược thực thi, mỗi biến được gán giá trị tương ứng và cuối cùng biểu thức s được đánh giá. Giá trị của biểu thức cuối cùng được đánh giá được trả về.

Nếu bạn không bao gồm một giá trị ban đầu cho một biến, nó sẽ được gán cho nil.

Thí dụ

Tạo tệp mã nguồn mới có tên main.lisp và nhập mã sau vào đó.

(let ((x 'a) (y 'b)(z 'c))
(format t "x = ~a y = ~a z = ~a" x y z))

Khi bạn nhấp vào nút Execute hoặc gõ Ctrl + E, LISP sẽ thực thi nó ngay lập tức và kết quả trả về là.

x = A y = B z = C

Các prog construct cũng có danh sách các biến cục bộ làm đối số đầu tiên của nó, được theo sau bởi phần thân của prog, và bất kỳ số biểu thức s.

Các prog hàm thực thi danh sách các biểu thức s theo thứ tự và trả về nil trừ khi nó gặp một lệnh gọi hàm có tên return. Sau đó, đối số của return hàm được đánh giá và trả về.

Thí dụ

Tạo tệp mã nguồn mới có tên main.lisp và nhập mã sau vào đó.

(prog ((x '(a b c))(y '(1 2 3))(z '(p q 10)))
(format t "x = ~a y = ~a z = ~a" x y z))

Khi bạn nhấp vào nút Execute hoặc gõ Ctrl + E, LISP sẽ thực thi nó ngay lập tức và kết quả trả về là.

x = (A B C) y = (1 2 3) z = (P Q 10)