5
我知道我可以做X is random(10).
以獲得從0到10的隨機數,但是是否有類似的命令來獲得隨機匹配項?Prolog中的隨機項目
我知道我可以做X is random(10).
以獲得從0到10的隨機數,但是是否有類似的命令來獲得隨機匹配項?Prolog中的隨機項目
您可以實施它。這裏是一個版本:
%% choose(List, Elt) - chooses a random element
%% in List and unifies it with Elt.
choose([], []).
choose(List, Elt) :-
length(List, Length),
random(0, Length, Index),
nth0(Index, List, Elt).
從http://ozone.wordpress.com/2006/02/22/little-prolog-challenge/
SWI-Prolog的V6發動機random_member/2
定義是這樣的:
?- listing(random_member).
random:random_member(D, A) :-
length(A, B),
C is random(B),
nth0(C, A, D).
用例:
?- random_member(a(N), [a(1), a(2), b(3)]).
N = 1.
?- random_member(a(N), [a(1), a(2), b(3)]).
N = 1.
?- random_member(a(N), [a(1), a(2), b(3)]).
N = 2.
?- random_member(a(N), [a(1), a(2), b(3)]).
false.
?- random_member(a(N), [a(1), a(2), b(3)]).
false.
?- random_member(a(N), [a(1), a(2), b(3)]).
N = 2.
您可能需要使用它在(-,+)
模式,但。
哇,在那裏,選擇/ 2的第一個條款不是你想要的。如果列表爲空,那麼您應該不會產生任何解決方案,而不會將Elt與空列表統一起來。 「選擇([],_): - !,失敗。」會解決它。此外,這會產生無數個解決方案,這通常是不合需要的。 – rndmcnlly