Clojure 为什么(((运行1[q](membero';cat q))[';(cat.0)])为false?

Clojure 为什么(((运行1[q](membero';cat q))[';(cat.0)])为false?,clojure,clojure-core.logic,Clojure,Clojure Core.logic,我正在做clojure/core.logic koans,并坚持: 在REPL中运行(run1[q](membero'cat q))告诉我答案是((cat.0))。我不太清楚中间的点是什么意思,但是无论如何,坚持(CAT.x 0)代替原来的代码> > 占位符在原来的KON中是没有帮助的(断言仍然失败)。你能给我指一下正确的方向吗?并解释cat和\u0之间的点是什么意思?我的猜测是,这意味着接下来的内容(即\uu0)是任意长度的尾巴,但我不是100%确定。 ==更新 给我指出了正确的方向(谢谢你,

我正在做clojure/core.logic koans,并坚持:

在REPL中运行
(run1[q](membero'cat q))
告诉我答案是
((cat.0))
。我不太清楚中间的点是什么意思,但是无论如何,坚持<代码>(CAT.x 0)<代码>代替原来的代码> > <代码>占位符在原来的KON中是没有帮助的(断言仍然失败)。你能给我指一下正确的方向吗?并解释
cat
\u0
之间的点是什么意思?我的猜测是,这意味着接下来的内容(即
\uu0
)是任意长度的尾巴,但我不是100%确定。 ==更新

给我指出了正确的方向(谢谢你,先生!)<代码>LCON实现了以下功能:

 (= (run 1 [q]
       (membero 'cat q))
    [(lcons 'cat '_.0)])
还有一点补充:

user=> (lcons 'cat '_.0)
(cat . _.0)
user=> '(cat . _.0)
(cat . _.0)
user=> (= '(cat . _.0) (lcons 'cat '_.0))
false

点是用来表示,嗯。根据,虚线列表是一种不合适的列表,而另一种是循环列表。因此,在上面的REPL会话中,第一个列表是带有两个元素的点列表(
'cat
'.0
),而第二个列表是带有三个元素的适当列表(
'cat'
.
.\u 0
)。它们的字符串表示法相同,但不同。

表示法(a.b)是使用cons单元格构建不正确列表的其他Lisp的遗留。您是对的,它的意思是“符号cat后跟任意长度的任何列表”,但实际上它是core.logic LCons值的打印表示。您无法通过键入简单的文字来生成该类型的值,因此无法将其与您自己的值进行比较。但是,我希望LCON是可排序的,因此您可以将
(首先)
“cat
”进行比较,等等。

我只想感谢您链接到逻辑koans。我从来都不知道他们,必须说他们是可怕的。它们应该链接到core.logic页面!谢谢你,阿马洛伊。我用详细的答案和几个链接更新了我的问题。
user=> (lcons 'cat '_.0)
(cat . _.0)
user=> '(cat . _.0)
(cat . _.0)
user=> (= '(cat . _.0) (lcons 'cat '_.0))
false