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

racket: equivalent to np.zeros((n, m))

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

球拍代码:

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

我想让它做什么,写在python:

np.zeros((5,5))

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

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

哇,我是不是觉得自己很傻。它始终是同一件事:评估的内容与仅是符号列表的内容。答案(见eval):

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

仍然对其他编码风格更好的答案持开放态度,我希望将其修改为 function/macro,将 np.zeros()np.ones() 翻译成 Lisp

你不想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)))

关于报价的深入处理(最后有准报价),请参阅