1

我不明白我在这里做错了什么。可能是错位的反引号。

球拍代码:

(require math/array)
(define mask_cube
  (let ([leng 5])
    `(make-array #(,leng ,leng) 0)))

我想要它做什么,用python编写:

np.zeros((5,5))

为什么逗号不像我认为的那样工作?如果有更优雅的方法来解决问题,请告诉我。大多数情况下,我只想要我漂亮、简短的np.zeros()功能

此外,如果我对反引号、逗号或球拍(甚至一般的 Lisp)有一些基本的误解,请告诉我。

4

2 回答 2

3

你不想eval在这里。相反,您引用的太多了;解决您的问题的简单方法是将向`内移动到适当的位置:

(define mask_cube
  (let ([leng 5])
    (make-array `#(,leng ,leng) 0)))

但是,如果您是初学者,我通常会避免引用;它比它需要的更复杂。改用vector函数就好了,这样更容易理解:

(define mask_cube
  (let ([leng 5])
    (make-array (vector leng leng) 0)))

有关引用的深入处理(最后带有 quasiquotation),请参阅引用和列表有什么区别?.

于 2018-07-12T00:12:45.247 回答
-1

哇,我是不是觉得自己很傻。它总是一样的:评估的内容与只是符号列表的内容。答案(见eval):

(define mask_cube
  (let ([leng 5])
    (eval
      `(make-array #(,leng ,leng) 0))))

仍然对使用更好风格编码的其他答案持开放态度,并希望将其修改为可翻译np.zeros()np.ones()转换为 Lisp的函数/宏

于 2018-07-12T00:08:51.513 回答