好的,我有一份表格清单:
myprg(X)。 X = [[a,b,c],[d,e,f],[g,h,i],[j,k,l]]。
这是列表中的子列表。
我想在子列表中显示以“g”作为第一个元素的LAST元素。 答案是“我”
答案 0 :(得分:0)
要腼腆,这是一个解决方案:
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).
下次您应确保包含您的姓名和教授的姓名和电子邮件地址和/或家庭作业提交网址。在家庭作业中发送也很难弄清楚,我们很乐意提供帮助。