Вычислите значения следующих вызовов - Lisp
Формулировка задачи:
Вычислите значения следующих вызовов:
(apply 'list '(a b)) (funcall 'list '(a b)) (funcall 'apply 'list '(a b)) (funcall 'list 'apply '(a b)) (funcall 'funcall 'funcall 'list 'list '(a b))
Решение задачи: «Вычислите значения следующих вызовов»
textual
Листинг программы
(apply 'list '(a b)) ==> (a b) (funcall 'list '(a b)) ==> ((a b)) (funcall 'apply 'list '(a b)) ==> (a b) (funcall 'list 'apply '(a b)) ==> (APPLY (a b)) (funcall 'funcall 'funcall 'list 'list '(a b)) ==> (LIST (a b))
Объяснение кода листинга программы
В коде идет проверка работы трех функций: apply, funcall и list.
apply- принимает три аргумента: функцию, список аргументов и список функций. Функция принимает список аргументов и возвращает результат выполнения функции с этими аргументами. В данном случае передается функцияlistи список(a b), поэтому результатом будет(a b).funcall- принимает два аргумента: функцию и список аргументов. Функция принимает список аргументов и возвращает результат выполнения функции с этими аргументами. В данном случае передается функцияlistи список(a b), поэтому результатом будет((a b)).funcall- принимает три аргумента: функцию, список аргументов и список функций. Функция принимает список аргументов и список функций и возвращает результат выполнения функции с этими аргументами. В данном случае передается функцияapplyи список(list (a b)), поэтому результатом будет(a b).funcall- принимает три аргумента: функцию, список аргументов и список функций. Функция принимает список аргументов и список функций и возвращает результат выполнения функции с этими аргументами. В данном случае передается функцияlistи списокfuncall (list (a b)), поэтому результатом будет(LIST (APPLY (a b))).