Засоби та принципи програмування на Ліспі
1. Контрольні конструкції
MuLisp використовує неявну форму PROGN для обчислення форм, які складають тіло функції. Окрім того, інтерпретатор muLіsp розпізнає в тілі функції неявні COND конструкції. Неявні COND-и роблять визначення функцій читабельними, короткими та ефективними. Спеціальні форми забезпечують контроль за обчисленням форм в процесі виконання програм. Розглянемо деякі контрольні інструкції.
1. QUOTE <об’єкт> повертає об’єкт
$ (SETQ a 125)
$ a$ (QUOTE a)$ (CAR (CONS 4 7))$ (CAR ‘(CONS 4 7))
125a4CONS
2. LOOP <форма1> <форма2> ... <формаN> Повторно обчислює форми у послідовному порядку доти, поки не зустрінеться неявний COND з предикатом, не рівним NIL. Розглянемо функцію LENGTH обчислення довжини списку. В першому стовпчику запропоновано рекурсивний, в лівому — нерекурсивний варіант програми.
(DEFUN LENGTHr (lst)(DEFUN LENGTH (lst)
((NULL lst) 0)(SETQ ct 0)
(+ 1 (LENGTHr (CDR lst))) )(LOOP
((NULL lst) ct)
(SETQ lst (CDR lst) ct (+ 1 ct)) ) )
3. IF <предикат> [THEN] <форма1> [ELSE] <форма2> Якщо значення предиката не дорівнює NIL, то видається [THEN] форма, інакше видається [ELSE] форма.
$ (IF (EQL ‘r ‘r)(CAR ‘(q w e r t y)) (CDR ‘(q w e r t y))) — q
$ (IF (EQL ‘r ‘w)(CAR ‘(q w e r t y)) (CDR ‘(q w e r t y))) — (w e r t y)
4. IDENTITY <об’єкт> Повертає об’єкт без жодних змін. Ця функція застосовується для використання змінних як предикатів в умовних виразах.
5. PROGN <форма1> <форма2> ... <формаN> Послідовно обчислює форми та повертає результат обчислення формиN.
6. PROG1 <форма1> <форма2> ... <формаN> Послідовно обчислює форми та повертає результат обчислення форми1. Функцію використовують для того, щоб вводити допоміжні змінні для збереження результатів в процесі обчислення інших виразів.
$ (SETQ a ‘(q w e r t y))
$ (PROG1 (CAR a) (SETQ a (CDR a)))
q
$ a