Ответ в теме: Разделение строки и подсчет символов

      Комментарии к записи Ответ в теме: Разделение строки и подсчет символов отключены
#2649

Опять приведу решение для SWI Prolog, т.к. диалект не указан. В вашем случае удобно рассматривать строку как список (в Turbo Prolog или Visual Prolog нужно предварительно преобразовать строку в список символов).
Можно смотреть, что исходный список состоит из части до точки с запятой, списки из одного элемента (точки с запятой), части после точки с запятой. Разделить список на части можно функцией append (там же смотри функцию length, которая пригодится для вычисления длин строк при использовании Turbo Prolog) или еще более красиво – функцией divide_list:

before_after_symbol(String, BeforeCount, AfterCount):-
  divide_list(String, [Before, ";", After]), !,
  lenght(Before, BeforeCount),
  length(After, AfterCount).

Отсечение тут стоит, т.к. по условию точка с запятой одна – если ее убрать, то ничего особо не изменится, но divide_list будет пробовать найти другие решения.