Вычисление определенных подсписков - Lisp
Формулировка задачи:
надо написать функцию, которая обрабатывает список списков, так, что при этом вычисляются только те подсписки, которые начинаются с символа звездочки или плюса.
Решение задачи: «Вычисление определенных подсписков»
textual
Листинг программы
(defun eval-select (w) (loop for a in w collect (if (and (listp a) (or (eq (car a) '*) (eq (car a) '+))) (eval a) a))) > (eval-select '(1 (+ 2 3) (+) (* 4 5) (*) '(6 7 8))) (1 5 0 20 1 '(6 7 8))
Объяснение кода листинга программы
В коде определён функцией eval-select
с одним аргументом w
.
С помощью цикла loop
осуществляется обход каждого элемента a
из w
.
Условие if
проверяет, является ли элемент списком a
. Если это так, то проверяется, является ли первый элемент списка a
одним из двух элементов: *
или +
. Если это так, то выполняется вычисление списка a
с помощью функции eval
, и результат присваивается переменной a
.
В конце цикла loop
результат вычисления списка a
присваивается аргументу w
.
При вызове функции eval-select
с аргументом '(1 (+ 2 3) (+) (* 4 5) (*) '(6 7 8))'
будет выведено (1 5 0 20 1 '(6 7 8))
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д