【发布时间】:2016-03-26 12:34:30
【问题描述】:
这可能是在 Prolog 中返回列表长度的函数的最简单的实现
count([], 0).
count([_|B], T) :- count(B, U), T is U + 1.
关于 Prolog,我仍然无法理解的一件事是使用变量作为参数的灵活性。
例如,我可以运行count([a, b, c], 3). 并获得true。我也可以运行count([a, b], X). 并得到答案X = 2.。奇怪的是(至少对我来说)我还可以运行 count(X, 3). 并获得至少一个结果,在解释器消失到无限循环之前看起来类似于 X = [_G4337877, _G4337880, _G4337883] ;。我什至可以运行像count(X, A). 这样真正“灵活”的东西并得到X = [], A = 0 ; X = [_G4369400], A = 1.,这显然是不完整的,但在某种程度上真的很好。
因此我的问题是多方面的。我可以以某种方式向 Prolog 解释在执行count(X, 3). 时不要超越第一个结果吗?我可以让 Prolog 为count(X, A). 生成任意数量的解决方案吗?我可以生成什么样的解决方案有限制吗?这个特定的谓词是什么使我无法为所有可能的查询类型生成所有解决方案?
【问题讨论】:
标签: prolog