Ракетка: эквивалентно 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() функция

Более того, если есть что-то фундаментальное, что я неправильно понимаю в отношении кавычек, запятых или ракеток (или даже Лиспа в целом), пожалуйста, дайте мне знать.

2 ответа

Решение

Ты не хочешь 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)))

Более подробное описание цитаты (с кавычкой в ​​конце) см. В чем разница между цитатой и списком?,

Вау, я чувствую себя глупо Это всегда одно и то же: что оценивается, а не просто список символов. Ответ (см. eval):

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

Все еще открыт для других ответов, которые закодированы с лучшим стилем, и я хочу изменить это в функцию / макрос, который переводит np.zeros() а также np.ones() в Лисп

Другие вопросы по тегам