Функция between на Prolog. Генерация чисел в диапазоне

      Комментарии к записи Функция between на Prolog. Генерация чисел в диапазоне отключены

Главная Форумы Программирование Помощь с решением задач на Prolog Общие вопросы Функция between на Prolog. Генерация чисел в диапазоне

Помечено: ,

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

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

    questioner
    Участник

    Во многих задачах на языке Prolog используется функция between, при этом пишут, что она является стандартной. Однако, в реализации языка, которую я использую такая функция отсутствует. Помогите реализовать ее, функция должна генерировать целые числа в заданном диапазоне:

    between(+Low, +High, ?Value)

    Функция подставляет на место Value все числа между Low и Hight включительно. В случае, если очередное число не подходит – функция пытается подобрать следующее.

  • #2122

    Во многих реализациях, например в SWI Prolog или GNU Prolog такая функция является встроенной. Возможно она отсутствует в Arity Prolog или, например, Strawberry Prolog. Её точно нет в Turbo и Visual Prolog, поэтому иногда ее действительно надо реализовывать самостоятельно.

    between(Low, Hight, _Value):-
      Low > Hight, !, fail.
    between(Low, Hight, Low).
    between(Low, Hight, Value):-
      NextLow is Low + 1, 
      between(NextLow, Hight, Value).

    Функция принимает на вход верхнюю и нижнюю границы. Если между ними нет ни одного числа (данные были изначально не верны или все числа уже оказались перебраны) – функция завершает работу. В противном случае, необходимо попробовать вернуть нижнюю границу в качестве результата, а если он не подойдет, то управление будет передано на третье правило, которое увеличит значение нижней границы и осуществи рекурсивный вызов для генерации остальных вариантов.

    Вложения:

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