Произведение внутри списка - Lisp

  1. Добрый вечер всем! Подскажите как через цикл do организовать нахождение произведения внутри списка. Т.е (1 2 3 (3 6) 2 1 (2 4) 2 ) - такого например. Нужно через do реализовать, как не могу понять, точнее не могу понять как доставать элементы из списка и производить над ними действия. Писал с помощью dolist, но он не учитывает вложенные списки. Сказали через do легче будет реализовать, посему прошу помощи. Вот пример реализации через dolist:


textual

Код к задаче: «Произведение внутри списка - Lisp»

(defun mult (nums)
  (do ((stack (list nums))
       (acc 1)
       current)
      ((null stack) acc)
    (setf current (pop stack))
    (do ()
        ((null current) t)
       (if (atom (car current))
           (setf acc (* acc (car current)))
           (push (car current) stack))
       (setf current (cdr current)))))
 
> (mult '(1 2 3 (3 6) 2 1 (2 4) 2))
3456

СДЕЛАЙТЕ РЕПОСТ

13   голосов, оценка 3.769 из 5



Похожие ответы
  1. Необходимо найти произведение элементов в списке, имеющем вид: ((х (х)) (х (х)) (х (х)) ...) На данный момент имеется такой код, которые не выводит нужное значение:

  1. Написать рекурсивную функцию от одного числового аргумента N, считавшую произведение чётных натуральных чисел от 2 до N... Не совсем разобрался ... как факториал вычислить функция вроде и есть, но как переделать таким образом чтобы брали только чётные числа?

  1. Прослушав одну лекцию в универе пытаюсь решить задачу. Помогите пожалуйста, не могу найти ошибку в коде.

  1. Сконструировать функцию которая реализовывает декартово произведение множеств представленных в форме списков. Например для множеств X=(A B C) и Y=(2 3) результатом вызова (CARTEZIAN X Y) будет список ((A 2) (A 3) (B 2) (B 3) (C 2) (C 3) ).

  1. Помогите пожалуйста! Сижу на зачёте - горю! Нужна программа, которая находит произведение первых двух атомов подсписка

  1. Дан список целых чисел. Определить функцию, возвращающую самое большое произведение трех чисел из этого списка.

  1. Сформировать в виде файла два вектора размерности не более 8, найти их скалярное произведение и ответ записать в файл есть нечто похожее для разности двух векторов

  1. Помогите пожалуйста. У нас есть код который находит произведение всех ненулевых чисел из заданного сложного списка.

  1. Добрый вечер. Нужна помощь с задачкой. Вычислить произведение нечётных элементов массива P(15) и их количество. Курс по Lisp'у нам прочитали, но массивов так и не коснулись, а какие-то примеры по ним - так и подавно. В интернете же я похожих задачек не обнаружил.