Основи мови програмування Лісп
Функція PSETQ ідентична до функції SETQ за винятком того, що всі форми оцінюються до того, як будуть здійснені будь-які заміни. Проілюструємо це на прикладі. Значення символа Sym позначатимемо через Val(Sym).
$ (SETQ w 1 e 2)Val(w)=1, Val(e)=2$ (SETQ w 1 e 2) Val(w)=1, Val(e)=2
$ (SETQ w e e w)Val(w)=2, Val(e)=2$ (PSETQ w e e w)Val(w)=2, Val(e)=1
При виконанні операції заміни необхідно розрізняти символ та значення. При старті системи mulLsp значенням кожного символа є він сам. Якщо ми введемо DOG, то і результатом буде DOG. Присвоїмо символові DOG значення CAT: (SET ‘DOG ‘CAT). Результатом виразу (SET DOG ‘HEN) буде HEN, але значення HEN ми присвоювали не символу DOG, а значенню символа DOG, тобто символу CAT. Значення символа DOG залишилося без зміни. Розглянемо результат наступних дій:
(SET ‘car ‘road)Val(car) = roadVal(road) = road
(SET car flower)Val(car) = roadVal(road) = flowerVal(flower) = flower
(SET ‘car car)Val(car) = roadVal(road) = flowerVal(flower) = flower
(SET road car)Val(car) = roadVal(road) = flowerVal(flower) = road
(SET ‘road 4)Val(car) = roadVal(road) = 4Val(flower) = road
(SET road ‘hen)помилка, 4 не є символом і не може приймати інші значення
POP повертає голову списка (вершину стека) і замінює значення
$ (SETQ a ‘(q w e r t))Val(a) = (q w e r t)
$ (POP a)Val(a) = (w e r t)
$ (PUSH ‘n a)Val(a) = (n w e r t)
4. Визначення функцій в Ліспі
Поряд з примітивними функціями можуть існувати функції, визначені користувачем. Функція викликається набором аргументів і повертає єдине значення. Визначення функції в Ліспі має наступний вигляд:
(DEFUN name (arg1 arg2 ...)
task1
task 2
. . . . . )
де name — ім’я функції, arg1, arg2, ... — аргументи (параметри). Тіло функції містить послідовність задач. Ключове слово DEFUN виникло з DEfine FUNction.
$ (DEFUN FIRST (lst)$ (FIRST ‘(q w e r t y))