Проверка принадлежности числа диапазону на Prolog

      Комментарии к записи Проверка принадлежности числа диапазону на Prolog отключены

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

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

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

    questioner
    Участник

    Нужна функция для проверки принадлежит ли число диапазону. При этом, если одна или обе из границ диапазона не заданы (переданы анонимные переменные) — то ему принадлежит любое число. Если не задано само число — то оно принадлежит любому диапазону. Возникает проблема именно с анонимными переменными, т.к. при их сравнении выдается ошибка:

    707 Free variable in expression

  • #2636

    Реализовать требуемое вам поведение можно следующим образом:

    in_range(Value, range(Value, _)):-!.
    in_range(Value, range(_, Value)):-!.
    in_range(Value, range(From, To)):-
      Value > From, Value < To.

    Первые два правила срабатывают если одна из границ диапазона не задана или не задано исходное число (т.к. в этом случае оно тоже успешно унифицируется любой границей диапазона).

    Однако, с помощью такого правила вы не сможете например получить все числа в диапазоне (мне кажется вы могли иметь это, говоря о случае когда не задано исходное число) — для этого нужно использовать предикат between.

    Вложения:

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