Prolog中的随机物品

时间:2010-02-14 13:43:57

标签: random prolog swi-prolog

我知道我可以X is random(10).来获取0到10之间的随机数,但是有一个类似的命令来获取随机匹配项吗?

2 个答案:

答案 0 :(得分: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.

您可能希望在(-,+)模式下使用它。

答案 1 :(得分:4)

您可以实施它。这是一个版本:

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