Проверка правильности расстановки скобок в строке на Prolog

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

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

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

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

    questioner
    Участник

    Помогите создать предикат, проверяющий правильность расстановки скобок в исходной строке.

  • #1970

    Если есть всего один тип скобок — то можно подсчитывать количество открытых скобок [блок-схема алгоритма проверки правильности расстановки скобок]. Вспомогательное правило инициирует счетчик нулем:

    check_brackets(String):-
      check_brackets(String, 0).

    К концу строки счетчик должен быть равен нулю — иначе какая-то скобка не была закрыта. Если в какой то момент счетчик оказался меньше нуля -значит в строке имеется лишняя закрывающая скобка. В остальных случаях строка разделяется на первый символ и остальные. Значение первого символа может изменить счетчик, который будет обработан рекурсивно вместе с хвостовой частью строки.

    check_brackets([], 0):-!.
    check_brackets(_String, Count):-
      Count < 0, !, fail.
    check_brackets([Head|Tail], Count):-
      [Head] = "(", !, TailCount is Count + 1, check_brackets(Tail, TailCount);
      [Head] = ")", !, TailCount is Count - 1, check_brackets(Tail, TailCount);
      check_brackets(Tail, Count).

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