задача по спискам в Prolog(контрольная на носу,а я не знаю,как справиться с заданием.подскажите,пожалуйста)
Здравствуйте!
Помогите,пожалуйста,разобраться с языком.Задание кажется не очень сложным,но решить его у меня не получается.
Необходимо в списке символов каждую указанную последовательность заменить на другую.
то есть необходимо написать реализацию replace(L1,L2,L3,L4),где:
L1-исходный список
L2-последовательность,которую нужно заменить
L3-последовательность,на которую нужно заменить
L4-итоговый список
Удалось реализовать только замену одной буквы на список,да и то если есть второе вхождение,то замена не происходит,то есть на replace([a,b,c,d,b],b,[k,l],L) выдает L=[a,k,l,c,d,b] вместо L=[a,k,l,c,d,k,l]
Как отследить это?Может,надо сохранять где-то L3 ,потому что после конкатенации он становится пустым вроде как?
Как реализовать сравнение списков текущего хвоста L1 и списка L2? То есть как сделать так,чтоб программа заменяла не один символ,а список?
Здесь concat записыват список L2 в конец списка L1
[code=prolog]concat([],[],L3):-L3=[].
concat([],[H2|T2],[H3|T3]):-H3=H2,concat([],T2,T3).
concat([H|T],L2,[H1|T1]):-H1=H,concat(T,L2,T1).
replace([],_,_,L4):-L4=[].
replace(L1,_,[],L4):-concat([],L1,L4).
replace([H1|T1],A2,L3,[H4|T4]):-A2\=H1, H4=H1,replace(T1,A2,L3,T4).
replace([H1|T1], A2,L3,[H4|T4]):-A2=H1,concat(L3,T1,[H4|T4]).[/code]