Ракетка: эквивалентно 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()
в Лисп