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

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

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

Просмотр 2 сообщений - с 1 по 2 (из 2 всего)
  • Автор
    Сообщения
  • #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).

Просмотр 2 сообщений - с 1 по 2 (из 2 всего)

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