-2

好的,我有一个表格列表:

我的prg(X)。X = [[a,b,c],[d,e,f],[g,h,i],[j,k,l]]。

那是列表中的子列表。

我想在具有“g”作为第一个元素的子列表中显示 LAST 元素。答案是“我”

4

1 回答 1

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).

下次你应该确保包括你的名字和你的教授的名字和电子邮件地址和/或家庭作业提交 URL。发送家庭作业也可能很棘手,我们很乐意提供帮助。

于 2013-05-01T15:04:13.793 回答