Я не могу понять, что я делаю неправильно здесь. Может быть, неулокальный backquote.
(require math/array)
(define mask_cube
(let ([leng 5])
'(make-array #(,leng ,leng) 0)))
np.zeros((5,5))
Почему запятая не работает, как мне кажется? Если есть более элегантный способ решить проблему, сообщите мне. В основном мне просто нужна моя красивая, короткая np.zeros()
Более того, если есть что-то фундаментальное, я недопонимаю о backquote, запятых или ракетке (или даже Lisp вообще), пожалуйста, дайте мне знать.
Вы не хотите, чтобы eval
здесь. Скорее, вы цитируете слишком много; простое решение вашей проблемы - переместить '
внутрь" в нужное место:
(define mask_cube
(let ([leng 5])
(make-array '#(,leng ,leng) 0)))
Однако Id обычно избегает цитаты, если вы новичок; это сложнее, чем нужно. Просто используйте vector
функцию, которая проще понять:
(define mask_cube
(let ([leng 5])
(make-array (vector leng leng) 0)))
Для углубленного рассмотрения цитаты (с квазикотацией в конце) см. В чем разница между цитатой и списком? ,
Вау, я чувствую себя глупо. Это всегда одно и то же: что оценивается по сравнению с тем, что только список символов. Ответ (см. eval
):
(define mask_cube
(let ([leng 5])
(eval
'(make-array #(,leng ,leng) 0))))
Все еще открыты для других ответов, которые кодируются с лучшим стилем и я np.zeros()
изменить это в функцию/макрос, которая переводит np.zeros()
и np.ones()
в Lisp
eval
вы делаете ошибку.
eval("np.zeros([{}, {}])".format(5, 5)
. Я думаю, это говорит о том, насколько ужасным является eval
.