форма привязки предопределена вне выражения let - PullRequest
0 голосов
/ 16 апреля 2020

«Синтаксическая ошибка макроэкспандирования» при применении формы цитаты к форме из let macro :

(def x '[y 1])
(let x y)

Как заставить это работать, если предопределенная форма *1013* предопределена вне let expression ?

@ EDIT

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

(def __ '[x 7 y 3 z 1])

(println
 (= 10 (let __ (+ x y)))
 (= 4 (let __ (+ y z)))
 (= 1 (let __ z)))

1 Ответ

1 голос
/ 16 апреля 2020

Невозможно задать привязку let вне формы let. Проблема 4clojure не просит вас сделать это, хотя я понимаю, почему вы пытаетесь сделать то, что показали (def ining __, чтобы быть буквальным вектором).

Что делает 4clojure за Сцена здесь принимает ваши буквенные входные и макрорасширяющиеся формы так, чтобы ваш ввод находился там, где был бы __. Он делает что-то вроде этого:

user=> (let [__ '[x 7 y 3 z 1]] `(let ~__ (+ ~'x ~'y)))
(clojure.core/let [x 7 y 3 z 1] (clojure.core/+ x y))

и затем оценивает результат:

user=> (clojure.core/let [x 7 y 3 z 1] (clojure.core/+ x y))
10

4clojure ожидает этот буквенный вектор без кавычки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...