2010-02-14 350 views
5

我知道我可以做X is random(10).以獲得從0到10的隨機數,但是是否有類似的命令來獲得隨機匹配項?Prolog中的隨機項目

回答

3

您可以實施它。這裏是一個版本:

%% 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/

+1

哇,在那裏,選擇/ 2的第一個條款不是你想要的。如果列表爲空,那麼您應該不會產生任何解決方案,而不會將Elt與空列表統一起來。 「選擇([],_): - !,失敗。」會解決它。此外,這會產生無數個解決方案,這通常是不合需要的。 – rndmcnlly

6

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. 

您可能需要使用它在(-,+)模式,但。