Как создать список списков в lisp? - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь запустить код в обычном lisp, но он продолжает выдавать мне следующую ошибку:

*** - SYSTEM::%EXPAND-FORM: (SETF (NTH X NUMS) 0) should be a lambda
      expression

Что я делаю не так? Я довольно новичок в lisp, и вот мой код:

(defun answer-ynq()

  (setq nums '(13 15 19 33))
  (setq numsstuff '())

  (loop for x from 1 to 4
    do (progn(
          (setf (nth x nums) 0) 
          (append numstuff nums)
          )))

  (print numstuff) 


)

(answer-ynq)

Кроме того, это правильный способ создания списка из списков? Мне нужно, чтобы numsstuff был списком списков таким образом, и если я приведу список объектов (13 15 19 33), я получу вывод, представляющий собой следующий список списков: ((0 15 19 33) (13 0 19 33) (13 15 0 33) (13 15 19 0))

Спасибо большое!

1 Ответ

1 голос
/ 20 марта 2020
CL-USER > (loop for i below 4
                collect (loop for e in '(13 15 19 33)
                              for j from 0
                              when (= i j) collect 0 else collect e))

((0 15 19 33) (13 0 19 33) (13 15 0 33) (13 15 19 0))
...