2010-02-14 8 views
5

나는 X is random(10).을 0에서 10까지 임의의 숫자를 얻기 위해 할 수 있다는 것을 알고 있지만, 무작위로 일치하는 항목을 얻는 비슷한 명령이 있습니까?프롤로그의 무작위 아이템

답변

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

거기에서, choose/2의 첫 번째 절은 원하는 것이 아닙니다. 목록이 비어있는 경우 Elt를 빈 목록으로 통합하는 대신 솔루션을 생성해서는 안됩니다. "choose ([], _) : -!, 실패." 그것을 고칠 것이다. 또한 일반적으로 바람직하지 않은 솔루션이 무한대로 생성됩니다. – rndmcnlly

6

SWI - 프롤로그 버전 6이 같은 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. 

당신은 아마 사용하려면 다음 버전입니다 그것도 (-,+) 모드.