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

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


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

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

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