Scheme 如何在推理方案中解释运行5(x)g0 g1

Scheme 如何在推理方案中解释运行5(x)g0 g1,scheme,reasoned-schemer,Scheme,Reasoned Schemer,我不明白如何运行n(x)g0 g1。。。穿过listo listo的定义如下 (定义列表) (λ(l) (康德 [(无法律效力)] [(桶l) (新鲜)(d) (cdro l d) (列表d))] [else#u])) 第29页第14段中经过推理的阴谋家说 (运行5(x) (listo(ABC.x))) 产生结果 () (_.0) (_.0 _.1) (_.0 _.1 _.2) (_.0 _.1 _.2 _.3)) 你能解释一下这是怎么发生的吗?提前谢谢。查询是 (run 5 (x)

我不明白如何运行n(x)g0 g1。。。穿过listo

listo的定义如下

(定义列表)
(λ(l)
(康德
[(无法律效力)]
[(桶l)
(新鲜)(d)
(cdro l d)
(列表d))]
[else#u]))
第29页第14段中经过推理的阴谋家说

(运行5(x)
(listo(ABC.x)))
产生结果

()
(_.0)
(_.0 _.1)
(_.0 _.1 _.2)
(_.0 _.1 _.2 _.3))
你能解释一下这是怎么发生的吗?提前谢谢。

查询是

(run 5 (x)
  (listo `(a b c . ,x)))
我添加了quasikote
`
和unquote
,该书使用粗体和非粗体文本:

(run5 (x)
  (listo (a b c . x)))
cdro
产生
d=`(bc,x)
,因此

(fresh (d)
     ; (cdro `(a b c . ,x) `(b c . ,x))  ;; disappears, has been solved
     (listo                `(b c . ,x)))
因此,现在整个过程重复
(listo`(b c.,x))
,然后
(listo`(c.,x))
,然后
(listo x)


这也是唯一可能的分支,因此
(listo`(abc.,x))
在逻辑上等同于
(listo x)
。这两个查询将产生相同的结果。

前面的28页详细解释了这一点。你看过了吗?(这本书看起来很简单,但你不能匆匆读完。我经常问“什么?”需要备份一下。)
(fresh (d)
     ; (cdro `(a b c . ,x) `(b c . ,x))  ;; disappears, has been solved
     (listo                `(b c . ,x)))