LISP - Петли

Возможна ситуация, когда вам нужно выполнить блок кодовых номеров несколько раз. Оператор цикла позволяет нам выполнять оператор или группу операторов несколько раз, и ниже приводится общая форма оператора цикла в большинстве языков программирования.

LISP предоставляет следующие типы конструкций для обработки требований цикла. Щелкните следующие ссылки, чтобы проверить их детали.

Sr. No. Конструкция и описание
1 петля

В loopконструкция - это простейшая форма итерации, предоставляемая LISP. В своей простейшей форме он позволяет многократно выполнять некоторые операторы, пока не найдетreturn заявление.

2 петля для

Конструкция цикла for позволяет реализовать итерацию, подобную циклу for, которая наиболее распространена в других языках.

3 делать

Конструкция do также используется для выполнения итерации с использованием LISP. Он обеспечивает структурированную форму итерации.

4 время жизни

Конструкция dotimes позволяет выполнять цикл для некоторого фиксированного количества итераций.

5 долист

Конструкция dolist позволяет перебирать каждый элемент списка.

Изящный выход из блока

В block и return-from позволяет плавно выйти из любых вложенных блоков в случае какой-либо ошибки.

В blockФункция позволяет вам создать именованный блок с телом, состоящим из нуля или более операторов. Синтаксис -

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

В return-from функция принимает имя блока и необязательное возвращаемое значение (по умолчанию - nil).

Следующий пример демонстрирует это -

пример

Создайте новый файл исходного кода с именем main.lisp и введите в него следующий код -

(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)

Когда вы нажимаете кнопку «Выполнить» или нажимаете Ctrl + E, LISP выполняет его немедленно, и возвращается результат -

ENTERING-OUTER-BLOCK 
ENTERING-INNER-BLOCK 

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