Визначення функцій в Ліспі, Детальна інформація
Визначення функцій в Ліспі
Мова програмування muLisp для трасировки має програму debug.lsp, яка загружається в середовище Ліспу. Для того, щоб дозволити трасировку будь-якої функції необхідно дати команду (TRACE-FUNCTION func). Якщо після цього викликати функцію function, то на екрані відобразиться шлях виконання функції. Команда (UNTRACE-FUNCTION func) забороняє трасировку функції func. Якщо в тілі функції func існує виклик інших функцій, і ми хочемо побачити їх трасировку, необхідно дозволити їх трасировку. Вираз func=value в трасі означає те, що функція func повертає значення value.
Наприклад, після команд (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 = NIL APPEND = (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))
(9 7 (Y (T R) E W Q) 3 2 1)
Наприклад, після команд (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 = NIL APPEND = (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))
(9 7 (Y (T R) E W Q) 3 2 1)
The online video editor trusted by teams to make professional video in
minutes
© Referats, Inc · All rights reserved 2021