-2
好的,我有一個表格列表:Prolog搜索子列表的特定元素
myprg(X)。 X = [[a,b,c],[d,e,f],[g,h,i],[j,k,l]]。
即列表中的子列表。
我想在子列表中顯示具有「g」作爲第一個元素的LAST元素。 答案是「我」
好的,我有一個表格列表:Prolog搜索子列表的特定元素
myprg(X)。 X = [[a,b,c],[d,e,f],[g,h,i],[j,k,l]]。
即列表中的子列表。
我想在子列表中顯示具有「g」作爲第一個元素的LAST元素。 答案是「我」
要靦腆,這裏有一個解決方案:
find_i([_,_,[g,_,i]|_], i).
這顯然適用於你給的情況。或者,我們可以使它不那麼具體:
find_i([_,_,[g,_,X]|_], X).
這裏有一個稍微好一點的一個實際執行一些搜索:
find_i([[g,_,X]|_], X).
find_i([_|Rest],X) :- find_i(Rest,X).
當然,它假定列表中的將只有一個項目。這是另一個稍微好一點的:
find_i([[g|Rest]|_], X) :- append(_, [X], Rest).
find_i([_|Rest], X) :- find_i(Rest, X).
爲什麼我們要搜索g
?也許我們應該拉他們趕出自己的變量:
find_i(G, [[G|Rest]|_], X) :- append(_, [X], Rest).
find_i(_, [_|Rest], X) :- find_i(Rest, X).
這一個你查詢像這樣:find_i(g, [[a,b,c],[d,e,f],[g,h,i],[j,k,l]], X)
。
更好的方法是分離出找到子列表並獲取列表的最後一個元素。通常在編程時,它有助於將事情分解成像這樣的組成部分並乾淨地解決它們。就像這樣:
last(L, X) :- append(_, [X], L).
find_by_first(G, [[G|Rest]|_], [G|Rest]).
find_by_first(G, [_|Rest], Sublist) :- find_by_first(G, Rest, Sublist).
find_i(G, L, X) :- find_by_first(G, L, Sublist), last(Sublist, X).
下一次,你應該一定要包括你的名字和你的教授的姓名和電子郵件地址和/或作業提交URL。在家庭作業中發送也很困難,我們很樂意提供幫助。