繁体   English   中英

Clojure,core.logic:listo

[英]Clojure, core.logic: listo

根据https://github.com/clojure/core.logic/wiki/Differences-from-The-Reasoned-Schemer core.logic 支持列表。

但是,以下代码无法编译

(ns test.chap03
  (:refer-clojure :exclude [==])  
  (:use [clojure.core.logic]))

(defn ex07 []
  (run*
    [x]
    (listo `(a b ~x d))))

它抱怨:

异常:java.lang.RuntimeException:无法解析符号:在此上下文中的列表,正在编译:(test/chap03.clj:8)

问题:这是怎么回事,我如何获得列表?

listo 未实施。 core.logic 并未附带 The Reasoned Schemer 的所有定义。

正如 user1311390 指出的那样,它们在测试中可用。

https://github.com/clojure/core.logic/blob/master/src/test/clojure/clojure/core/logic/tests.clj#L459这里是实现listo的部分。

(defn pairo [p]
  (fresh [a d]
    (== (lcons a d) p)))

(defn listo [l]
  (conde
    [(emptyo l) s#]
    [(pairo l)
     (fresh [d]
       (resto l d)
       (listo d))]))

现在我们可以得到预期的行为。 请注意,为简洁起见,我特意没有将整个缺失的实现包含在 The Reasoned Schemer 中。 见上面的链接。

(run 1
  [x]
  (listo `(a b ~x d))) 
;; => (_0)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM