Написать программу ввода списка имен функций - Lisp (229884)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Помогите, пожалуйста, с решением данной задачи: Написать программу ввода списка имен функций, ввода списка данных и получения списка результатов, используя функцию mapcar. Результат записать в текстовый файл и вывести на экран.Имена функций и данные вводить из файла. Функции следующие: eq, <, eval, exp. Количество и последовательность вызываемых функций может быть различной.

Решение задачи: «Написать программу ввода списка имен функций»

textual
Листинг программы
(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).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5
Похожие ответы