我正在尝试将用户输入矩阵加载到clisp中的数组:
(defvar *rows* (read))
(defvar *columns* (read))
(defvar *matrix* (read-line))
(setq m1 (make-array (list *rows* *columns*) :initial-contents *matrix*))
Run Code Online (Sandbox Code Playgroud)
输入示例:
2
3
((1 2 3) (4 5 6))
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
*** - MAKE-ARRAY: "((1 2 3) (4 5 6))" is of incorrect length
Run Code Online (Sandbox Code Playgroud)
但是,如果我在代码中手动输入:
(setq m1 (make-array '(2 3) :initial-contents '((1 2 3) (4 5 6))))
Run Code Online (Sandbox Code Playgroud)
它运作正常,我错过了什么?
我必须在Common Lisp(homework)中为列表添加编写一个递归宏.到目前为止我所拥有的是:
(defmacro matrix-add-row (r1 r2 sum_row)
(if (not (and r1 r2)) `sum_row
(progn
`(matrix-add-row (cdr r1) (cdr r2) (cons sum_row (+ (car r1) (car r2))))
(reverse sum_row)
)
)
)
Run Code Online (Sandbox Code Playgroud)
我用这个函数调用
(matrix-add-row `(1 2) `(3 4) ())
Run Code Online (Sandbox Code Playgroud)
作为输出,我得到未评估的代码而不是数字(这导致无限循环).
如何放置,"正确(或正确调用宏)?