用户输入的 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
。
我正在尝试将用户输入矩阵加载到 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
。