选择/ 2多个答案swi prolog

时间:2011-02-01 00:02:09

标签: prolog infinite

如何定义一个选择/ 2来给出无限的答案

  choose(List, Elt) :-
    length(List, Length),
    random(0, Length, Rand),
    nth1(Rand, List, Elt).

我的选择/ 2只给出一个答案

的示例:

?- choose([1,2,3],Elt).
Elt = 1;
Elt = 1;
Elt = 3;
...

2 个答案:

答案 0 :(得分:2)

简单:附加为第二个子句

choose(List, E) :- choose(List, E).

到你的程序。顺便说一下,你似乎想要nth0 / 3而不是nth1 / 3。而更好,更具声明性的名称而不是“choose / 2”就是“list_choice / 2”。

答案 1 :(得分:2)

尝试使用重复:

choose(L, O) :- repeat, member(O, L).

它将回溯列表中的所有成员,然后重复将使其再次尝试所有这些成员。

?- choose([1,2,3],Out). Out = 1 ; Out = 2 ; Out = 3 ; Out = 1 ; Out = 2 ; Out = 3 ;