我创建了一个函数,它将一个任意长的数字列表作为参数。从这个列表中,我希望使用let
在本地创建矩阵。矩阵将根据列表中的数字序列具有行和列。例如,
>(foo '(2 2 3) arg2 ... argn)
应在本地创建
M1: #2a((0 0)(0 0)) M2: #2a((0 0 0)
(0 0 0))
也就是说,第一个矩阵从列表中相邻元素的前两个元素中获取其尺寸,等等。
我的问题是:有没有办法在Mn
表达式中迭代地创建任意长的局部变量集let
?或者这是我应该使用宏的情况?
答案 0 :(得分:1)
我的问题是:有没有办法在let表达式中迭代地创建任意长的局部变量Mn集合?或者这是我应该使用宏的情况吗?
不,您无法在运行时生成现有LET表达式的变量。
是的,您可以使用宏来生成具有“任意”数量的变量的LET表达式。但只有在宏扩展时(例如编译代码时)知道数字列表时才会知道。
为了理解您的问题,您需要向我们展示示例代码,您希望如何使用生成的变量?
答案 1 :(得分:1)
我实际上设法通过将矩阵保存在向量中来解决问题:
(defun sum-net (structure)
;make vectoor to hold matrices
(let ((matrices (make-array `(,(length structure)))))
;fill structures with empty matrices->weights & vectors->Net-Layers
(dotimes (n (1- (length matrices)))
(setf (svref matrices n)
(make-array `(,(nth n structure)
,(nth (+ n 1) structure))))
感谢您的建议。 附:抱歉,我感冒了。