Prolog结合谓词

时间:2016-02-28 15:24:36

标签: prolog predicate prolog-findall

关于Prolog的一个小问题。假设我使用内置谓词findall/3来获取列表并使用变量X作为输出。

我想知道如何在另一个谓词(例如last/2)中使用此列表来查找此列表的最后一个元素。如果你可以包含一个小例子,那将有很大帮助。

1 个答案:

答案 0 :(得分:1)

首先,由于Prolog的目标是成为逻辑编程编程语言,因此存在输出变量这样的东西。

然而,假设您知道变量X在某个谓词之后有界并且您打算在调用新谓词时使用此值,则可以使用Prolog&#39; s < em> logical&#34;和&#34; ,/2。我把&#34; &#34;在引号之间,因为这个有时与对&#34;和&#34;的自然理解有所不同。用自然语言表现。

因此您可以使用谓词:

findall(A,foo(A),X),last(X,L).

要首先查找foo/1的所有出现,请提取变量A,将这些变为列表X,最后得到X的{​​{3}}元素

然后,您可以在定义的谓词中使用它:

last_foo(L) :-
    findall(A,foo(A),X),
    last(X,L).

如果您使用以下命令运行:

foo(a).
foo(9).
foo(b).

结果是:

?- foo(A).
A = a ;
A = 9 ;
A = b.

?- findall(A,foo(A),X).
X = [a, 9, b].

现在获得最后一个的结果是:

?- findall(A,foo(A),X),last(X,L).
X = [a, 9, b],
L = b.

或:

?- last_foo(L).
L = b.