Я выбрал в Jekejeke Prolog новый предикат random_labeling / 1 в связи с CLP (FD), который неявно берет генератор случайных чисел из базы знаний, доступ к которому можно изменить и изменить с помощью флага Prolog sys_random.
Jekejeke Prolog 3, Runtime Library 1.3.4
(c) 1985-2019, XLOG Technologies GmbH, Switzerland
?- use_module(library(finite/clpfd)).
% 20 consults and 0 unloads in 944 ms.
Yes
?- use_module(library(basic/random)).
% 0 consults and 0 unloads in 0 ms.
Yes
?- random_new(111,R), set_prolog_flag(sys_random,R),
X in 0..5, Y #= X*X, random_label([X,Y]),
write(X-Y), nl, fail; true.
4-16
3-9
5-25
1-1
2-4
0-0
Yes
?- random_new(111,R), set_prolog_flag(sys_random,R),
X in 0..5, Y #= X*X, random_label([X,Y]),
write(X-Y), nl, fail; true.
4-16
3-9
5-25
1-1
2-4
0-0
Я планирую еще один предикат random_labeling / 2.Но это будет не семя, а экземпляр Java java.util.Random.Это более универсально, чем семя.Но я думаю, что изменение API на labeling / 2 и некоторые опции будут лучшим выбором.
Редактировать 29.12.2018: Теперь я буду делать заметки, так как я думаю, что это хорошийИдея принять indomain / 2, в настоящее время я реализовал random_indomain / 1, и из этого реализовал random_label / 1.См. Также здесь:
indomain / 2 из пролога ECLiPSe random: Попробуйте перечисление в случайном порядке.При возврате ранее проверенное значение удаляется.Этот метод использует random / 1 для создания случайных чисел, используйте seed / 1 прежде, чтобы сделать результаты воспроизводимыми.http://eclipseclp.org/doc/bips/lib/gfd_search/indomain-2.html