Мова програмування Лiсп
$ (EQL 'qw 'qw)$ (EQL (CAR '(q w)) q)$ (EQL (CAR '(q,w) NIL)
TTF
При написаннi програм на Лiспi часто виникає запитання: чи є даний об'єкт атомом? Це питання вирiшує предикат ATOM. Вiн повертає Т, якщо об'єкт є атомом i NIL в iншому випадку. Порожнiй список NIL є атомом.
$ (ATOM qwerty)$ (ATOM '(q w e))$ (ATOM '())
TFT
$ (ATOM '(q))$ (ATOM 3)
FT
Функцiї призначення
Функцiї призначення застосовуються для надання значень програмним змiнним. До них вiдносяться:
1. (SET symbol object)- замiна символа об'єктом
2. (SETQ sym1 form1 sym2 form2 ... )- спецiальна форма функцiї SET
3. (PSETQ sym1 form1 sym2 form2 ... )- спецiальна форма функцiї SET
4. (POP symbol)- повертає вершину стека (списку)
5. (PUSH symbol form)- кладе символ symbol в стек (список) form.
Операцiя замiни значення символа здiйснюється за допомогою функцiї SET. Вона присвоює символу symbol значення object, або зв'язує symbol з object. Для скорочення замiсть SET ' пишуть SETQ (SET Quote). Як результат функцiя присвоєння повертає другий аргумент.
$ (SET 'fox '(a s d))$ (SETQ vowels '(a e i o u)))
$ (SETQ fox '(a s d))$ (SETQ vowels (CONS 'y vowels))
(a s d)(y a e i o u)
Функцiя SETQ дозволяє здiйснювати замiну значень декiльком символам в однiй командi: (SETQ a 1 b 2 c 3). При цьому змiни виконуються послiдовно злiва направо. Пiсля цього значенням символу a стане 1, b - 2, c - 3.
Функцiя PSETQ iдентична до функцiї SETQ за винятком того, що всi форми оцiнюються до того, як будуть здiйсненi будь-якi замiни. Проiлюструємо це на прикладi. Значення символа 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
При виконаннi операцiї замiни необхiдно розрiзняти символ та значення. При стартi системи mulLsp значенням кожного символа є вiн сам. Якщо ми введемо DOG, то i результатом буде DOG. Присвоїмо символовi DOG значення CAT: (SET 'DOG 'CAT). Результатом виразу (SET DOG 'HEN) буде HEN, але значення HEN ми присвоювали не символу DOG, а значенню символа DOG, тобто символу CAT. Значення символа DOG залишилося без змiни. Розглянемо результат наступних дiй: