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

      Комментарии к записи Ответ в теме: Проверка правильности расстановки скобок в строке на Prolog отключены
#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).