(球拍设置中我的miniKanren的详细信息出现在bottom1上。)
引号和取消报价在推理的阴谋家中的工作方式似乎与他们在球拍中的工作方式不匹配。例如,第2章第2节suggests2函数定义如下:
(run #f
(r )
(fresh (y x )
(== '(,x ,y) r )))如果我对此进行评估,我就会得到'((,x ,y))。如果我把它改写成这样:
(run #f
(r )
(fresh (y x )
(== (list x y) r)))我得到了预期的结果,'((_.0 _.1))。
这似乎是个小问题,但在许多情况下,所需的翻译非常冗长。例如,在第3章的练习45 (第34页)中,本书提供了以下定义: roughly3:
(run 5 (r)
(fresh (w x y z)
(loto (('g 'g) ('e w) (x y) . z))
(== (w (x y) z) r)))为了得到他们得到的结果,我不得不这样改写它:
(run 5 (r)
(fresh (w x y z)
(loto (cons '(g g)
(cons (list 'e w)
(cons (list x y)
z))))
(== (list w (list x y) z)
r)))1正如所描述的这里,我运行了raco pkg install minikanren,然后定义了一些缺失的部分。
事实上,他们写的并不准确,但是如果你注意到这节的脚注和之前的一段,那就是你得到了什么。
3模数一些含蓄的引语和未引用的话,我无法推断。
发布于 2018-12-03 08:03:54
使用反向引号`,而不是一直使用的简单引号'。
https://stackoverflow.com/questions/53331052
复制相似问题