Вычисление определенных подсписков - 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)).