2010-07-22 67 views
3

我写了一个谓词common_participant(Person, PairEvent)。它从我的知识库中返回一些事实。我想知道是否有任何方法来执行变量绑定,并收集所有结果,而不是每次都使用分号。Prolog中的变量绑定

感谢,

+0

我不确定我是否理解这个问题。每次都是什么? – Gian 2010-07-22 15:58:56

回答

1

是的,你可以使用findall/3。但取决于你真正想做什么,通常有更好的方法。你想输出东西吗?那就试试这个:

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

这样,你不需要把所有的组合在大名单在同一时间,但只限于打印所需要的人。

编辑:修复代码,如Kaarel建议。

+0

您的print_participants/0不会打印所有解决方案,除非您使用分号(OP要避免的),或称其为“print_participants,失败;为真”。 – Kaarel 2010-07-23 01:36:05

+0

我修复了代码。顺便说一句,我解释了这样一个问题,例如“我不想一直按分号键,只是为了得到所有答案”。所以我认为代码中的分号并不重要。 – 2010-07-23 16:32:12

+0

是的,这就是我的意思是罗兰,非常感谢你。它工作正常。 – paranza 2010-07-30 15:05:03