更新prolog列表中的元素

时间:2018-05-20 10:57:50

标签: prolog

我有一份清单和一份清单。我想使用第二个列表中的元素更新列表列表。

例如:

我有一份清单 [[banan,NA],[apple,NA]]和列表[sweet,notsweet], 想要更新列表的列表,所以我将有一个列表列表 [[香蕉,甜],[苹果,notsweet]]

我已尝试过以下代码,但我认为我无法正确理解基本情况。

update([[]],[],[]).
update([[T|_]|HH],[FB|H2],[NState|_]) :-
   NState=[T|FB],
   update(HH,H2,NState). 

任何帮助,都会非常感激

感谢

1 个答案:

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