0

我创建了一个函数,它将任意长的数字列表作为参数。从这个列表中,我希望使用let. 矩阵将根据列表内的数字序列具有行和列。例如,

>(foo '(2 2 3) arg2 ... argn)

应该在本地创建

M1: #2a((0 0)(0 0))     M2: #2a((0 0 0)
                                (0 0 0))  

也就是说,第一个矩阵从列表中相邻元素的前两个元素中获取其维度,依此类推。

我的问题是:有没有办法Mnlet表达式中迭代地创建任意长的局部变量集?或者这是我应该使用宏的情况?

4

2 回答 2

1

我的问题是:有没有办法在 let 表达式中迭代地创建任意长的局部变量 Mn 集?或者这是我应该使用宏的情况?

不,您不能在运行时生成现有 LET 表达式的变量。

是的,您可以使用宏来生成具有“任意”数量变量的 LET 表达式。但前提是您知道宏扩展期间的数字列表(例如编译代码时)。

为了理解您的问题,您需要向我们展示示例代码,您希望如何使用生成的变量?

于 2013-01-10T11:14:38.183 回答
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))))

感谢您的建议。PS抱歉耽搁了,我感冒了。

于 2013-01-11T11:57:28.723 回答