2010-02-14 20 views
5

0'dan 10'a rasgele bir sayı almak için X is random(10). yapabilirim, ancak rastgele eşleme öğesi almak için benzer bir komut var mı?Rastgele öğeler Prolog

cevap

3

Bunu uygulayabilirsiniz.

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

+1

Whoa,/2 seçiminin ilk maddesi, sizin istediğinizi değil. Eğer boş bir liste varsa, Elt'i boş liste ile birleştirmek yerine çözüm üretmemelisiniz. "([], _) 'ı seçin: -, başarısız." düzeltirdi. Aynı zamanda, bu genellikle istenmeyen olan sonsuz sayıda çözüm üretir. – rndmcnlly

6

SWI-Prolog v6 böyle random_member/2 tanımlamıştır:

?- listing(random_member). 
random:random_member(D, A) :- 
    length(A, B), 
    C is random(B), 
    nth0(C, A, D). 

Kullanım örneği:

?- 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. 

Muhtemelen kullanmak istiyorum Burada bir sürümüdür Yine de (-,+) modunda.