我有一份清单和一份清单。我想使用第二个列表中的元素更新列表列表。
例如:
我有一份清单 [[banan,NA],[apple,NA]]和列表[sweet,notsweet], 想要更新列表的列表,所以我将有一个列表列表 [[香蕉,甜],[苹果,notsweet]]
我已尝试过以下代码,但我认为我无法正确理解基本情况。
update([[]],[],[]).
update([[T|_]|HH],[FB|H2],[NState|_]) :-
NState=[T|FB],
update(HH,H2,NState).
任何帮助,都会非常感激
感谢
答案 0 :(得分:3)
你几乎就在那里。首先,如果不再有[fruit,*]
对,则第一个列表为空,因此基本情况的第一个参数应为[]
。此时其他列表也必须为空,因为它们的长度相同。
一般来说,第一个列表将有一个双元素列表作为其头部,第一个列表是您感兴趣的对象,第二个列表是您不关心的,即类似{ {1}}。该列表的尾部将包含更多[X,_]
个,因此我们可以将其称为X
。然后第一个参数看起来像Xs
。第二个参数是一个平面列表,因此您可以编写[[X,_]|Xs]
(读作:列表以[Y|Ys]
开头,后面跟着Y
。{)。最后一个参数是一个双元素列表Y
,后面跟着其他这样的对([X,Y]
' s),因此:XY
。关系也必须适用于尾部,可以通过递归目标来描述。您可以像这样在Prolog中表达以上内容:
[[X,Y]|XYs]
通过对谓词的这些更改,您的评论中的示例查询会产生所需的答案:
update([],[],[]).
update([[X,_]|Xs],[Y|Ys],[[X,Y]|XYs]) :-
update(Xs,Ys,XYs).