Примеры программ с циклами
(defun first-a (la) ;; самый левый атом (setq x la) (loop (setq x (car x)) ; левый элемент структуры (cond ((atom x)(return x)) ) ; явный выход из цикла при обнаружении атома ) )
(print (first-a '(((123) 46) 5) ))
Пример 11.3. Выбор самого левого атома из произвольной структуры данных (html, txt)
(defun len-do (ld) ;; длина списка (do ((x ld (cdr x)); на каждом шаге переход к хвосту списка (N 0 (1+ N))) ; подсчет числа шагов ((null x) N)) ; выход из цикла при пустом списке )
(print (len-do '(1 2 3 4 5)))
Пример 11.4. Вычисление длины списка (html, txt)
(defun list-pa (lp) (setq rl nil) (dolist (el lp rl) ; параметры перебора и результат (setq rl (cons (cons el el) rl)) ))
(print (list-pa '(a b c d))) ; = ((A . A)(B . B)(C . C)(D . D))
Пример 11.5.
(html, txt)
(defun ind-n (ln n) (setq bl ln) (setq ind nil) (dotimes (i n ind) (setq ind (cons (- n i) (cons (car bl ) ind ))) (setq bl (cdr bl)) )) (print (ind-n '(a b c d e f g) 4)) ; = D
Пример 11.6. Индексный выбор элемента из списка (html, txt)
(Go Атом ) | Безусловный переход на оператор, помеченный Атомом |
(Prog Атомы-или-Формы …) | Вычисляет последовательность форм в императивном стиле |
(Prog1 Форма …) | Вычисляет формы, формальный результат – значение первой из них. |
(Prog2 Форма …) | Вычисляет формы, формальный результат – значение второй из них. |
(Progn Форма …) | Вычисляет формы, формальный результат – значение последней из них. |
(Return Форма ) | Результат и завершение формы Prog |
(Do (var ...) ( expr rez ...) expr ...) | Цикл с последовательным заданием параметров и выходом по заданному условию |
(Do* (var ...) ( expr rez ...) expr ...) | Цикл с параллельным заданием параметров и выходом по заданному условию |
(Dolist (var list [rez] ) expr ...) | Цикл перебора значений параметра из списка |
(Dotimes (var number [rez] ) expr ...) | Цикл, работающий заданное число раз |
(Loop expr ...) | Цикл работающий до внутреннего Return |