LISP - Vòng lặp

Có thể có một tình huống, khi bạn cần thực thi một khối mã số lần. Câu lệnh lặp cho phép chúng ta thực hiện một câu lệnh hoặc một nhóm câu lệnh nhiều lần và sau đây là dạng chung của câu lệnh lặp trong hầu hết các ngôn ngữ lập trình.

LISP cung cấp các loại cấu trúc sau để xử lý các yêu cầu lặp. Nhấp vào các liên kết sau để kiểm tra chi tiết của chúng.

Sr.No. Cấu trúc & Mô tả
1 vòng

Các loopcấu trúc là dạng lặp đơn giản nhất được cung cấp bởi LISP. Ở dạng đơn giản nhất, nó cho phép bạn thực thi một số câu lệnh lặp đi lặp lại cho đến khi nó tìm thấyreturn tuyên bố.

2 vòng lặp cho

Vòng lặp for construct cho phép bạn triển khai một vòng lặp for giống như phép lặp phổ biến nhất trong các ngôn ngữ khác.

3 làm

Cấu trúc do cũng được sử dụng để thực hiện lặp lại bằng LISP. Nó cung cấp một dạng lặp có cấu trúc.

4 dotimes

Cấu trúc dotimes cho phép lặp lại một số lần lặp cố định.

5 lập danh sách

Cấu trúc dolist cho phép lặp qua từng phần tử của danh sách.

Thoát khỏi khối một cách duyên dáng

Các blockreturn-from cho phép bạn thoát một cách duyên dáng khỏi bất kỳ khối lồng nhau nào trong trường hợp có bất kỳ lỗi nào.

Các blockhàm cho phép bạn tạo một khối được đặt tên với phần thân bao gồm không hoặc nhiều câu lệnh. Cú pháp là -

(block block-name(
...
...
))

Các return-from hàm lấy tên khối và giá trị trả về tùy chọn (mặc định là nil).

Ví dụ sau đây chứng minh điều này -

Thí dụ

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

(defun demo-function (flag)
   (print 'entering-outer-block)
   
   (block outer-block
      (print 'entering-inner-block)
      (print (block inner-block

         (if flag
            (return-from outer-block 3)
            (return-from inner-block 5)
         )

         (print 'This-wil--not-be-printed))
      )

      (print 'left-inner-block)
      (print 'leaving-outer-block)
   t)
)
(demo-function t)
(terpri)
(demo-function nil)

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à:

ENTERING-OUTER-BLOCK 
ENTERING-INNER-BLOCK 

ENTERING-OUTER-BLOCK 
ENTERING-INNER-BLOCK 
5 
LEFT-INNER-BLOCK 
LEAVING-OUTER-BLOCK