球拍:相当于np.zeros((n,m))

时间:2018-07-12 00:05:56

标签: python numpy lisp racket backquote

我不明白我在做什么错。也许放错了引号。

球拍代码:

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

我想要做的事,用python编写:

np.zeros((5,5))

为什么逗号不像我想的那样工作?如果有解决问题的更优雅的方法,请告诉我。通常,我只想要我漂亮而简短的np.zeros()函数

此外,如果我对反引号,逗号或球拍(或什至一般来说是Lisp)有一些误解,请告诉我。

2 个答案:

答案 0 :(得分: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)))

有关报价的详细信息(末尾带有半引号),请参见What is the difference between quote and list?

答案 1 :(得分:-1)

哇,我感到愚蠢吗?总是一回事:被评估的内容与只是符号列表的内容。答案(请参见eval

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

仍然欢迎使用更好样式编码的其他答案,并希望将其修改为将np.zeros()np.ones()转换为Lisp的函数/宏