Clojure,core.logic,mini-kanren,Reasoned Schemer

时间:2012-05-31 21:28:31

标签: clojure logic clojure-core.logic

代码

(defn ex20 []
  (run*
    [x]
    (resto '(c o r n) (list x 'r 'n))))

(defn ex20a []
  (run*
    [x]
    (resto '(c o r n) `(~x r n))))

结果

(ex20) -> (o)
(ex20a) -> ()

问题:

为什么呢?这是怎么回事? run *和宏之间是否存在一些奇怪的交互?

谢谢!

1 个答案:

答案 0 :(得分:1)

syntax-quote命名空间符号:

(defn ex20a []
  (run* [x]
    (resto `(c o r n) `(~x r n))))

(defn ex20a []
  (run* [x]
    (resto '(c o r n) (list x 'r 'n))))