将查询的所有结果放在 Prolog 的列表中 [英] Putting all results of a query in a list in Prolog

查看:53
本文介绍了将查询的所有结果放在 Prolog 的列表中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道如何制作一个谓词,将从某个查询中获得的所有结果(所以我得到一个结果并按分号直到我得到 False)放在一个列表中.

I'd like to know how to make a predicate that puts all results obtained from some query (so I get a result and press semicolon until I get False) in a list.

例如,如果我在一些 Prolog 侦听器中编写 foo(X,[1,2,3]).,假设结果是

For example if I write foo(X,[1,2,3]). in some Prolog listener, let's say the result is

X=[11];
X=[22];
False.

我想将所有这些结果放在一个列表中,因此会发生以下情况.

I would like to get all those results in a list, so something like the following would happen.

?-another_foo(X,[1,2,3]).
X=[[11],[22]].

another_foo 会以某种方式使用 foo 来创建一个包含 foo 的所有结果的列表.我只是不知道如何.

another_foo would somehow use foo to create a list with all the results from foo. I just don't know how.

推荐答案

使用内置谓词 findall/3:

?-findall(X0, foo(X0, [1,2,3]), X).
X = [[11], [22]].

你可以定义你的another_foo/2:

another_foo(X, Input) :-
  findall(X0, foo(X0, Input), X).

这篇关于将查询的所有结果放在 Prolog 的列表中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆