如何定义一个选择/ 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;
...
答案 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 ;