Книга: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПРОЛОГ
Генератор случайных чисел (random)
Генератор случайных чисел (random)
Цель random(R, N) конкретизирует N целым числом, случайно выбранным в диапазоне от 1 до R. Метод выбора случайного числа основан на конгруэнтном методе с использованием начального числа («затравки») инициализируемого произвольным целым числом. Каждый раз, когда требуется случайное число, ответ вычисляется на основе существующего начального значения, и при этом порождается новое начальное число, которое сохраняется до тех пор, пока вновь не потребуется вычислить случайное число. Для хранения начального числа между вызовами random мы используем базу данных. После того как начальное число использовано, мы убираем (с помощью retract) из базы данных старую информацию о начальном числе, вычисляем его новое значение, и засылаем в базу данных новую информацию (с помощью asserta). Исходное начальное значение – это просто факт в базе данных, с функтором seed имеющим одну компоненту – целое значение начального числа.
seed(13).
random (R,N):-seed(S),N is (S mod R) + 1,retract(seed(S)),NewSeed is (125 * S + 1) mod 4096,asserta(seed(NewSeed)),!.
Используя семантику retract можно упростить определение random следующим образом:
random(R,N):-retract(seed(S)),N is (S mod R)+1,NewSeed is (125 * S +1) mod 4096,asserta(seed(NewSeed)),!.
Для того, чтобы напечатать последовательность случайных чисел, расположенных в диапазоне между 1 и 10, которая обры-вается после того, как будет порождено значение 5, нужно задать следующий вопрос:
?- repeat, random(10,X), write(X), nl, X=5.
- 12.6.2. Функции POSIX: random() и srandom()
- Пример 12-10. Генератор 10-значных случайных чисел
- Пример 9-25. Имитация бросания кубика с помощью RANDOM
- 9.6. $RANDOM: генерация псевдослучайных целых чисел
- Пример 9-26. Переустановка RANDOM
- Генератор случайных чисел
- О случайных числах и сеансовых ключах
- 7.8.7 Генератор случайных чисел
- Генерация случайных чисел
- 7.6. Генераторы
- 5.3. Округление чисел с плавающей точкой
- Использование различных форматов чисел