0

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

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

4

1 回答 1

0

首先,由于 Prolog 的目标是成为一种逻辑编程编程语言,所以没有输出变量之类的东西。

然而,假设你知道一个变量在某个谓词之后有界,并且你打算在调用新谓词时使用这个值,你可以使用 Prolog 的X逻辑" and" ,/2。我将“”放在引号之间,因为这有时自然语言中“和”如何表现的自然理解不同。

因此,您可以使用谓词:

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

首先找到 的所有出现foo/1,提取变量A,将它们放入列表中X,最后得到 的last/2元素X

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

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.
于 2016-02-28T17:03:36.117 回答