У меня есть список символов (в основном слово), и я хочу заменить гласные в слове подчеркиванием ['_'] и вернуть новый список.
например:
?-sub([s,e,g,e,d],A).
A=[s,_,g,_,d]
Моя попытка построить новый список в обратном порядке, а затем, когда он вышел из вызова предиката, он разбирает все и объявляет, что нашел цель без выходной строки!
Алгоритм, который я использовал: выбрать элемент списка и проверить, является ли он гласным или нет, и добавить ['_'] или сам элемент в новый список.
sub([],B).
sub([X|T1],Y):-
((vocal(X), append(['_'],Y,Z));
(not(vocal(X)), append([X],Y,Z))),
sub(T1,Z).
vocal(a).
vocal(e).
vocal(i).
vocal(o).
vocal(u).