只是关于Prolog的一个小问题。假设我使用内置谓词findall/3
来获取列表并使用变量X
作为我的输出。
我想知道如何在另一个谓词(例如 last/2
)中使用此列表来查找此列表的最后一个元素。如果你也能包括一个小例子,那将有很大帮助。
首先,由于Prolog的目标是成为一种逻辑编程语言,因此存在诸如输出变量之类的nu。
但是,假设您知道一个变量X
在某个谓词之后限定,并且您打算在调用新谓词时使用此值,则可以使用 Prolog 的逻辑"and",/2
。我将"and"放在引号之间,因为这有时与自然语言中"and"行为的自然理解不同。
因此,您可以使用谓词:
findall(A,foo(A),X),last(X,L).
要首先找到foo/1
的所有出现,提取变量A
,将它们放入列表X
,最后得到X
的last/2
元素。
例如,您可以在定义的谓词中使用它:
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.