我該怎麼定義一個選擇/ 2給予無限的答案選擇/ 2多個答案SWI序言
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給予無限的答案選擇/ 2多個答案SWI序言
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(List, E) :- choose(List, E).
到您的程序。順便說一句,你似乎想要nth0/3而不是nth1/3。例如,「list_choice/2」是一個更好,更具說明性的名稱,而不是「choose/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 ;