當且僅當L是包含R中不是列表的所有項的列表時,我需要編寫一個成功的謂詞f(L,R)。 例如:Prolog中的子列表中的所有元素的列表
f(L,[1,2,3,[4,5,6],[[7,8,9]],[]]).
應該給:
L = [1,2,3,4,5,6,7,8,9]
我寫了一個謂詞,給出了以下的結果,而不是:
L = [1,2,3,4,5,6,7,8,9,[]]
空列表不應該出現在結果中。我的謂語如下:
f([],[]).
f(V,[H|T]):- H = [_|_] -> append(L,R,V),
f(L,H), f(R,T),!;
V = [H1|T1], H1=H, f(T1,T).
我有兩個疑問。首先,空列表不應該出現在結果中。另外我不知道爲什麼它不起作用,如果我不切(!)。事實上,如果我不放棄它,它給了我上面的結果,但如果我要求另一個結果,它會永遠循環。我真的不明白爲什麼這會循環。
見本問題http://stackoverflow.com/questions/11220567/flatting-a-list/。通常,Input是第一個參數,輸出第二個參數,例如f([1,2,3,[4,5,6],[[7,8,9]],[]],L)==> L [1,2,3,4,5,6,7,8,9] – joel76