那么,有缺陷的功能如下:
(defun make-matrix (n)
(make-array (n n) :initial-element 0))
Run Code Online (Sandbox Code Playgroud)
我想使用像(make-matrix 8)更换更长时间的函数(make-array '(8 8) :initial-element 0),但CLISP说有一个错误(n n),因为n它不是一个定义的函数.我该如何写这个make-matrix函数?
是否可以使用列表作为参数调用make-array函数?例如:
(make-array '((length '("a" "b")) (length '("r" "8" "5"))))
Run Code Online (Sandbox Code Playgroud)
返回:
#<TYPE-ERROR expected-type: NUMBER datum: (LENGTH '(...
Run Code Online (Sandbox Code Playgroud)
即使我尝试使用以下命令转换长度的结果:
(coerce (length '(1)) 'number)
Run Code Online (Sandbox Code Playgroud)
它适用于一维数组但不适用于二维数组.
当我使用此函数创建数组时,出现以下错误:
> (defun f1(lst)
(setf m (make-array '((length lst) 3))))
F1
> (f1 '(1 2 3))
Error: Not a nonnegative integer - (LENGTH LST)
Run Code Online (Sandbox Code Playgroud)
列表的长度应为非负整数,在这种情况下为3,那么为什么会出现此错误,我该怎么办?
> (length '(1 2 3))
3
Run Code Online (Sandbox Code Playgroud) (defun makeAr(li co)
(make-array '(li co)))
Run Code Online (Sandbox Code Playgroud)
这不起作用,它说 li 和 co 是非法参数,尽管我这样称呼它例如:
(make-array 3 3)
Run Code Online (Sandbox Code Playgroud)
这根本行不通。有谁知道为什么?