Prolog中的变量绑定

3

我编写了一个谓词common_participant(Person, PairEvent),它从我的知识库返回一组事实。我想知道是否有一种方法可以进行变量绑定并收集所有结果,而不必每次都使用分号。

谢谢,

I.


我不确定我理解这个问题。每次什么? - Gian
1个回答

1

是的,可以使用 findall/3。但是根据您实际想要做什么,通常有更好的方法。 您想要输出东西吗?那么请尝试这样做:

print_participants :-
    common_participant(Person, PairEvent),
    write(Person), write(' participates in '), write(PairEvent), write('.'), nl,
    fail.
print_participants :-
    true.

这样,您就不需要同时保留所有组合在一个大列表中,而只需要打印所需的那个。

编辑:根据Kaarel的建议修复了代码。


你的print_participants/0函数如果不使用分号(这是OP想要避免的),或者调用它时加上"print_participants,fail; true",就无法打印出所有的解决方案。 - Kaarel
我修复了代码。顺便说一下,我的理解是“我不想一直按分号键来获取所有答案”,因此我认为代码中的分号并不重要。 - Roland Illig
是的,Roland,那就是我的意思,非常感谢你。它运行得很好。 - panza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接