我如何定义一个choose/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;
...
尝试使用重复:
choose(L, O) :- repeat, member(O, L).
它将回溯列表的所有成员,然后重复将导致它再次尝试所有这些成员。
?- choose([1,2,3],Out).
Out = 1 ;
Out = 2 ;
Out = 3 ;
Out = 1 ;
Out = 2 ;
Out = 3 ;
简单:作为第二个子句追加
choose(List, E) :- choose(List, E).
到你的程序。顺便说一句,您似乎想要 nth0/3 而不是 nth1/3。一个更好的、更具声明性的名称而不是“choose/2”是例如“list_choice/2”。