Написать программу ввода списка имен функций - Lisp (229884)
Формулировка задачи:
Решение задачи: «Написать программу ввода списка имен функций»
(defun task (flist arglist) (mapcar #'(lambda (f arg) (if (eq f 'eval) (funcall f arg) (apply f arg))) flist arglist)) ==> task (task '(+ - > eval expt exp) '((1 2 3) (6 7 8) (1 4 2) (+ 5 7) (2 5) (1))) ==> (6 -9 NIL 12 32 2.71828182845905) (task '(+ - > eval eq expt exp) '((1 2 3) (6 7 8) (1 4 2) (+ 5 7) (a b) (2 5) (1))) ==> (6 -9 NIL 12 NIL 32 2.71828182845905)
Объяснение кода листинга программы
В этом коде определена функция task
, которая принимает два аргумента: flist
и arglist
.
flist
— это список функций, которые нужно вызвать.
arglist
— это список аргументов, которые нужно передать в эти функции.
Внутри функции task
используется операция mapcar
, которая применяет к каждому элементу flist
анонимную функцию. Эта анонимная функция принимает два аргумента: функцию и её аргумент. Если функция имеет имя eval
, то ей передаётся аргумент. В противном случае, аргумент передаётся в функцию.
Результатом работы функции task
является список результатов вызова функций из flist
с аргументами из arglist
.
В первом примере вызывается функция task
с flist = (+ - > eval expt exp)
и arglist = '((1 2 3) (6 7 8) (1 4 2) (+ 5 7) (2 5) (1))
. Результатом будет (6 -9 NIL 12 32 2.71828182845905)
.
Во втором примере вызывается функция task
с flist = (+ - > eval eq expt exp)
и arglist = '((1 2 3) (6 7 8) (1 4 2) (+ 5 7) (a b) (2 5) (1))
. Результатом будет (6 -9 NIL 12 NIL 32 2.71828182845905)
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д