用户输入的 Lisp 数组长度不正确

Lisp make-array from user input incorrect length

我正在尝试将用户输入矩阵加载到 clisp 中的数组:

(defvar *rows* (read))
(defvar *columns* (read))
(defvar *matrix* (read-line))
(setq m1 (make-array (list *rows* *columns*) :initial-contents *matrix*))

输入示例:

2
3
((1 2 3) (4 5 6))

我收到一个错误:

*** - MAKE-ARRAY: "((1 2 3) (4 5 6))" is of incorrect length

但是,如果我在代码中手动输入:

(setq m1 (make-array '(2 3) :initial-contents '((1 2 3) (4 5 6))))

它工作正常,我错过了什么?

你想要:

(setq m1 (make-array '(2 3) :initial-contents '((1 2 3) (4 5 6))))

但是你的代码是这样的:

(setq m1 (make-array '(2 3) :initial-contents '"((1 2 3) (4 5 6))"))

您传入的不是初始内容的列表结构,而是一个字符串。

将字符串转换为列表或使用 read 而不是 read-line