Ответ в теме: Задача на Visual Prolog. Вычеркивание букв

      Комментарии к записи Ответ в теме: Задача на Visual Prolog. Вычеркивание букв отключены
#2847

Я не понимаю как должна работать ваша программа, но я бы решил задачу примерно так:

remove_even_after_symbol([], _Symbol, []):-!.
remove_even_after_symbol([SingleElement], _Symbol, [SingleElement]):-!.
remove_even_after_symbol([Symbol, _UnwantedSymbol|Tail], Symbol, [Symbol|TailResult]):-
  !, remove_even_after_symbol(Tail, Symbol, TailResult).
remove_even_after_symbol([A, B|Tail], Symbol, [A, B|TailResult]):-
  remove_even_after_symbol(Tail, Symbol, TailResult).

Если исходная строка пуста или состоит из одного единственного символа – вычеркивать нечего, нужно просто вернуть исходную строку в качестве результата.

Выделим первые два символа строки. Если первый совпадает с искомым (буква “о”) – второй символ нужно пропустить. Остальные символы обработаем рекурсивно, и к полученному результату добавим только первый отделенный символ.

Если же первый символ не совпадает с искомым – то ничего вычеркивать не нужно. Остальные (кроме первых двух) символы обрабатываются рекурсивно, к полученному результату дописываются первые два символа.

Я привел реализацию на SWI Prolog, однако, вы можете преобразовать строку в список символов и использовать этот код для Visual или Turbo Prolog. Однако можно и переписать его с использованием функции frontchar (фактически она разделяет строку на голову и хвост):

remove_even_after_symbol("", _Symbol, ""):-!.
remove_even_after_symbol(String, _Symbol, String):-
  frontchar(String, _SingleElement, ""), !.
remove_even_after_symbol(String, Symbol, ResultString):-
  frontchar(String, Symbol, StringWithoutSymbol), !,
  frontchar(StringWithoutSymbol, B, Tail), 
  remove_even_after_symbol(Tail, Symbol, TailResult),
  frontchar(Tailresult, Symbol, ResultString).
remove_even_after_symbol([A, B|Tail], Symbol, ResultString):-
  frontchar(String, A, StringWithoutA), !,
  frontchar(StringWithoutA, B, Tail), 
  remove_even_after_symbol(Tail, Symbol, TailResult),
  frontchar(Tailresult, B, TailResultWithB),
  frontchar(TailResultWithB, A, ResultString).