Визначення функцій в Ліспі
Наприклад, після команд (TRACE-FUNCTION APPEND) (APPEND ‘(q w e) (r t y u)) на екрані відобразиться траса (спочатку перший стовпчик, потім — другий):
APPEND [(q w e) (r t y u)]APPEND = (r t y u)
APPEND [(w e) (r t y u)] APPEND = (e r t y u)
APPEND [(e) (r t y u)]APPEND = (w e r t y u)
APPEND [NIL (r t y u)]APPEND = (q w e r t y u)
Розглянемо трасу функції REVERSE з дозволом трасировки функції APPEND для виразу (REVERSE ‘(q w)) (спочатку перший стовпчик, потім — другий):
REVERSE [(q w)]REVERSE = (w)
REVERSE [(w)]APPEND [(w), (q)]
REVERSE [NIL]APPEND [NIL, (q)]
REVERSE = NILAPPEND = (q)
APPEND [NIL, (w)]APPEND = (w q)
APPEND = (w)REVERSE = (w q)
Завдання
I Варіант завдань
1. Написати функцію, яка знаходить:
a) третій елемент четвертого підсписку г) останній атом лінійного спискуб) перший елемент другого підсписку д) останній атом списку з підсписками
в) перший атом списку з підсписками е)перевіряє належність елемента до списку
2. Написати функцію REVERSE, не використовуючи функцій селектора та конструктора. Вказівка: використайте функції PUSH та POP.
3. Написати функцію, яка:
а) з вихідного списку робить множину в) знаходить різницю двох множин
б) об’єднує дві множини г) знаходить перетин двох множин
II Варіант завдань
1. Написати функції:
а) (REVERSE lst), де lst– список з підсписками. Функція повертає обернений на усіх рівнях список lst.
$ (reverse_all '(1 2 3 (q w e (r t) y) 7 9))