defun со списком в качестве аргумента

Я пытаюсь выбрать Лисп в качестве своего нового языка, и у меня возникают некоторые проблемы с разработкой того, как заставить части функции работать с каждым элементом переданного списка. к нему.

Чтобы научиться обойти это, я пытаюсь написать довольно простую форму деления, не квакающего, когда один из элементов списка равен 0 (а вместо этого просто возвращает 0)

(defun divtest (elements)
  (dolist (x elements)
    (if (zerop x) 0 () )
  (/ elements)))))

Я пытаюсь чтобы запустить это как:

(divtest '(20 2 5))

Что дает:

*** - /: (20 2 5) is not a number

Точка отказа, похоже, коренится в том факте, что я не «извлекаю» элементы из списка перед их передачей в функцию (в данном случае ни / ни dolist не работает должным образом, так как x никогда не принимает значение 0). Если я прав, может ли кто-нибудь сказать мне, как выполнить это «извлечение»?


Примечание. Этот вопрос связан с тем, который я задавал ранее , но, поскольку я не знаю, какой часть предыдущего ответа фактически позволила ему работать так, как задумано, с этой конкретной проблемой. Я решил углубиться в основы

6
задан Community 23 May 2017 в 12:00
поделиться