-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。在家庭作业中发送也很困难,我们很乐意提供帮助。