Случайные элементы в прологе
-
20-09-2019 - |
Вопрос
Я знаю, что могу сделать X is random(10).
Чтобы получить случайное число от 0 до 10, но есть ли аналогичная команда, чтобы получить случайный подходящий элемент?
Решение
Вы можете реализовать это. Вот версия:
%% 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://osone.wordpress.com/2006/02/22/little-prolog-challenge/
Другие советы
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.
Вы, вероятно, хотите использовать его в (-,+)
режим хотя.
Не связан с StackOverflow