首页 > 解决方案 > Prolog 中按值结果传递如何工作的示例

问题描述

我是 Prolog 的新手,我知道按值结果传递是如何工作的。但是,我注意到 Prolog 缺乏学习材料,并希望看到它在该语言中如何工作的示例。

标签: prologparameter-passing

解决方案


答案是:没有。

在标准术语中,您始终且仅“通过引用传递”。您通过引用传递的对象是术语(这些是有向的,可能是循环图,通常是树),它们是全局可见的(可能是字符串、原子、数字等的模优化)。

因此,当您调用此目标时:

?- member(X,[1,2,3]).

谓词member/2接收对全局存储区域中“空单元”的引用,上面由变量名称命名X(它会尝试用有用的东西填充它),以及对结构的引用,这里[1,2,3]可能写在全局储藏区域。

返回时,打印X由 填充的的值:member/2

?- member(X,[1,2,3]).
X = 1 ;
...

至于返回值,用标准术语来说,一个被调用的谓词(由一个原子目标p(X,Y)表示,如或 false(表示“谓词证明失败”/“没有证明该目标的证据”/“没有理由在逻辑上将此目标标记为 TRUE”)。或者,它可以抛出异常。

请注意,Prolog 中没有办法表达“目标可以在逻辑上标记为 FALSE”(即使 Prolog 可能会傲慢地打印false以响应查询),尽管存在“否定为失败”,但这是另一个问题。


推荐阅读