用户输入的Lisp make-array长度不正确

时间:2015-11-17 22:28:13

标签: arrays matrix common-lisp

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

HRESULT hresult = S_OK;

IColorSourceReader* pColorSource;
[-----code to process this information------]

IColorFrameReader* pFrameReader;
hresult = pColorSource->OpenReader(&pFrameReader);

输入示例:

(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

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

1 个答案:

答案 0 :(得分:9)

你想:

(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