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