Заполнить список случайными числами на Prolog

      Комментарии к записи Заполнить список случайными числами на Prolog отключены

Главная Форумы Программирование Помощь с решением задач на Prolog Задачи на списки Заполнить список случайными числами на Prolog

В этой теме 1 ответ, 2 участника, последнее обновление  Васильев Владимир Сергеевич 2 года/лет, 1 месяц назад.

  • Автор
    Сообщения
  • #1983

    questioner
    Участник

    Мне нужно обработать большой список. Чтобы не вводить его руками, я бы хотел заполнить его случайными числами. Это возможно сделать на Prolog?

  • #1984

    Функция rand_list принимает длину и возвращает список случайных чисел:

    randList(Size, _List):-
      Size < 0, !, fail.
    randList(0, []):-!.
    randList(Size, [Head|Tail]):-
      NextSize is Size - 1, random(Head), !,
      randList(NextSize, Tail).

    Если значение длины меньше нуля, то решить задачу не возможно, поэтому функция завершается неудачей, т.е. выполняет отсечение, которое запрещает поиск других решений, а затем fail, указывающий что решения нет.
    Если длина равна нулю — функция возвращает пустой список. В противном случае — вычисляет случайное значение первого элемента списка, а остальные получает рекурсивно, уменьшив длину списка на единицу.
    Для генерации случайный чисел можно использовать встроенную функцию random. В ряде реализаций Prolog такая функция отсутствует, а в остальных ее поведение может отличаться. В Turbo Prolog и SWI Prolog она вернет число в диапазоне от 0 до 1.

    Генерация случайных чисел часто удобна при отладке программы, однако результаты будут меняться с каждым запуском. Возможна ситуация, когда при некотором значении вы получите ошибку, поправите ее и заходите проверить не повторится ли она снова, но если на вход подаются случайные числа — то повторить эксперимент не получится. В этом случае можно использовать генератор псевдослучайных чисел, которому можно установить затравку (первый элемент, из которого сгенерируются все остальные). Чтобы повторить эксперимент — достаточно ввести такое же значение затравки.

Для ответа в этой теме необходимо авторизоваться.