Как я могу сгенерировать несколько выражений во время компиляции, внутри вызова макроса? - PullRequest
1 голос
/ 19 августа 2011

Определенный макрос запускает каждое выражение в своем теле, чередуя атом между каждым выражением и собирая результаты.

Это хорошо работает с жестко закодированными выражениями, но если я хочу динамически генерировать сериювыражения, которые будут вставлены в тело вызова макроса, что, очевидно, не сработает, потому что это будет оценено после того, как макрос выполнит свою работу.

Полагаю, решение состоит в том, чтобы написать собственный макрос всгенерируйте выражения, которые мне нужны, но я не уверен, что они будут оцениваться перед внешним макросом.

Я пробовал что-то подобное, но это не сработало:

(mac genexpr (list)
  (map (fn (e) `(something ,e)) list))

1 Ответ

5 голосов
/ 19 августа 2011

Попробуйте использовать форму begin (схема) или progn (обычный шрифт).Похоже, вы используете дугу, которой кажется имя этой конструкции do.

(mac genexpr (list)
  `(do ,@(map (fn (c) `(something ,e)) list)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...