我試圖刪除出現在Prolog中的子列表[z,z,z]之後的列表的所有成員。 f.ex removeafterZZZ([a,b,c,z,z,z,a], X) -> X = [a,b,c,z,z,z].
刪除列表中出現的給定列表的成員
我有方法子表和聯接給出。
% first argument is a sublist of the second argument
sublist(Sublist, List):-
join(_List1, List2, List),
join(Sublist,_List3, List2).
% we get the list in third argument by joining lists from first two arguments
join([], L, L).
join([Head | Tail1], List2, [Head | Tail3]):-
join(Tail1, List2, Tail3).
所以,我一直在思考的3個可能的輸入 「選項」:
1)[]
2)類似[A,B,C],[A,B, C,Z,Z],其中輸出自動將==輸入
3)類似[A,b,C,Z,Z,Z,A]
所以我想的3個規則:
removeafterZZZ([],[]). %for empty lists
removeafterZZZ(List,X) := %for lists with no [z,z,z] sublist
not (sublist ([z,z,z], List)) ,
X = List.
removeafterZZZ([H|T], X) := %for lists with sublist [z,z,z]
join(H, X, X), %join the head of list with X
removeafterZZZ(T, X). %call function again with tail
因此,這顯然不能這樣工作,我怎麼知道我是否已經寫入z,z,z到輸出列表中?我應該使用櫃檯嗎?怎麼樣?
他被允許使用append,除了他在OP中稱其爲「join」。 – hugomg
啊,就這樣。我認爲加盟可能會祕密追加,但沒有充分考慮到這一點。 – LinearZoetrope
非常感謝你的解釋!這確實解決了我的問題。 – thenet