小编use*_*251的帖子

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

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

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

arrays common-lisp matrix

1
推荐指数
1
解决办法
99
查看次数

矩阵加法中常见的lisp递归宏

我必须在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)

作为输出,我得到未评估的代码而不是数字(这导致无限循环).

如何放置,"正确(或正确调用宏)?

macros recursion common-lisp

-1
推荐指数
1
解决办法
201
查看次数

标签 统计

common-lisp ×2

arrays ×1

macros ×1

matrix ×1

recursion ×1