Random 序言:如何从列表中非均匀地随机选择一个元素?

Random 序言:如何从列表中非均匀地随机选择一个元素?,random,prolog,Random,Prolog,是否有人有任何Prolog代码来非一致地从列表中选择一个随机元素 当给定与输入列表中每个条目相关联的概率时,我想复制的功能。我在库(随机)中没有发现任何有用的内容 下面是我的实现选择(Xs,Ps,Y): choice([X|_], [P|_], Cumul, Rand, X) :- Rand < Cumul + P. choice([_|Xs], [P|Ps], Cumul, Rand, Y) :- Cumul1 is Cumul + P, Rand >= C

是否有人有任何Prolog代码来非一致地从列表中选择一个随机元素


当给定与输入列表中每个条目相关联的概率时,我想复制的功能。

我在
库(随机)
中没有发现任何有用的内容

下面是我的实现
选择(Xs,Ps,Y)

choice([X|_], [P|_], Cumul, Rand, X) :-
    Rand < Cumul + P.
choice([_|Xs], [P|Ps], Cumul, Rand, Y) :-
    Cumul1 is Cumul + P,
    Rand >= Cumul1,
    choice(Xs, Ps, Cumul1, Rand, Y).
choice([X], [P], Cumul, Rand, X) :-
    Rand < Cumul + P.

choice(Xs, Ps, Y) :- random(R), choice(Xs, Ps, 0, R, Y).
?- choice([1,2,3], [0.1,0.2,0.7], Y).
Y = 3 .

?- choice([1,2,3], [0.1,0.2,0.7], Y).
Y = 1 .

?- choice([1,2,3], [0.1,0.2,0.7], Y).
Y = 2 .

?- choice([1,2,3], [0.1,0.2,0.7], Y).
Y = 3 .

?- choice([1,2,3], [0.1,0.2,0.7], Y).
Y = 2 .

?- choice([1,2,3], [0.1,0.2,0.7], Y).
Y = 3 .

?- choice([1,2,3], [0.1,0.2,0.7], Y).
Y = 3 .

?- choice([1,2,3], [0.1,0.2,0.7], Y).
Y = 3 .

?- choice([1,2,3], [0.1,0.2,0.7], Y).
Y = 3 .

?- choice([1,2,3], [0.1,0.2,0.7], Y).
Y = 3 .

?- choice([1,2,3], [0.1,0.2,0.7], Y).
Y = 3 .

...