好的,我有一个表格列表:
我的prg(X)。X = [[a,b,c],[d,e,f],[g,h,i],[j,k,l]]。
那是列表中的子列表。
我想在具有“g”作为第一个元素的子列表中显示 LAST 元素。答案是“我”
好的,我有一个表格列表:
我的prg(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。发送家庭作业也可能很棘手,我们很乐意提供帮助。