在prolog中更新列表列表中的元素

在prolog中更新列表列表中的元素,prolog,Prolog,我有一份清单和一份清单。我想使用第二个列表中的元素更新列表的列表 例如: 我有一张单子 [[banan,NA],[apple,NA]]和一个列表[甜的,不甜的], 想更新列表的列表,所以我会有一个列表的列表 [[香蕉,甜的],[苹果,不甜的]] 我试过下面的代码,但我想我不能正确地理解基本情况 update([[]],[],[]). update([[T|_]|HH],[FB|H2],[NState|_]) :- NState=[T|FB], update(HH,H2,NState)

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

例如:

我有一张单子 [[banan,NA],[apple,NA]]和一个列表[甜的,不甜的], 想更新列表的列表,所以我会有一个列表的列表 [[香蕉,甜的],[苹果,不甜的]]

我试过下面的代码,但我想我不能正确地理解基本情况

update([[]],[],[]).
update([[T|_]|HH],[FB|H2],[NState|_]) :-
   NState=[T|FB],
   update(HH,H2,NState). 
任何帮助,都将不胜感激


谢谢

你就快到了。首先,让我们观察一下,如果没有更多的
[fruit,*]
对,那么第一个列表是空的,因此基本情况的第一个参数应该是
[]
。此时,其他列表也必须为空,因为它们的长度相同

一般来说,第一个列表将有一个两元素列表作为其头部,第一个元素是您感兴趣的对象,第二个元素是您不关心的,即类似于
[X,]
。该列表的尾部将包含更多的
X
,因此我们可以称之为
Xs
。然后第一个参数看起来像
[[X,]| Xs]
。第二个参数是一个平面列表,因此您可以编写
[Y | Ys]
(读作:列表以
Y
开头,后面是进一步的
Y
)。最后一个参数是一个两元素列表
[X,Y]
,后面是其他类似的对(
XY
),因此:
[[X,Y]|XYs]
。尾部也必须保持这种关系,这可以用递归目标来描述。您可以在Prolog中这样表达上述内容:

update([],[],[]).
update([[X,_]|Xs],[Y|Ys],[[X,Y]|XYs]) :-
   update(Xs,Ys,XYs).
通过对谓词的这些更改,来自注释的示例查询将生成所需的答案:

?- update([[banana,*],[apple,*]],[sweet,notsweet],C).
C = [[banana, sweet], [apple, notsweet]].

你快到了。首先,让我们观察一下,如果没有更多的
[fruit,*]
对,那么第一个列表是空的,因此基本情况的第一个参数应该是
[]
。此时,其他列表也必须为空,因为它们的长度相同

一般来说,第一个列表将有一个两元素列表作为其头部,第一个元素是您感兴趣的对象,第二个元素是您不关心的,即类似于
[X,]
。该列表的尾部将包含更多的
X
,因此我们可以称之为
Xs
。然后第一个参数看起来像
[[X,]| Xs]
。第二个参数是一个平面列表,因此您可以编写
[Y | Ys]
(读作:列表以
Y
开头,后面是进一步的
Y
)。最后一个参数是一个两元素列表
[X,Y]
,后面是其他类似的对(
XY
),因此:
[[X,Y]|XYs]
。尾部也必须保持这种关系,这可以用递归目标来描述。您可以在Prolog中这样表达上述内容:

update([],[],[]).
update([[X,_]|Xs],[Y|Ys],[[X,Y]|XYs]) :-
   update(Xs,Ys,XYs).
通过对谓词的这些更改,来自注释的示例查询将生成所需的答案:

?- update([[banana,*],[apple,*]],[sweet,notsweet],C).
C = [[banana, sweet], [apple, notsweet]].

您打算尝试的查询是什么<代码>更新(..)。。。。请在你的问题里面展示它。你可以编辑它。不确定,我可以找到哪里更新我的问题,无论如何,这是我的目标。我有列表A=[[香蕉,],[苹果,]],列表B=[甜的,不甜的],目标=[[香蕉,甜的],[苹果,不甜的]]。(使用列表2的元素更新列表2并在更新后返回结果。在问题文本下,您是否看到灰色的“共享编辑标志”字样?如果看到,请单击“编辑”。您是否键入了
list A=[[banana,*],[apple,*]],list B=[sweet,notsweet],goal=[[banana,sweet],[apple,notsweet]]
?将您的代码用反勾括起来
“`
,否则,
*
s之间的文本将以斜体显示(我键入了
“*斜体*”
)。您是否也设想调用
a=[[[*,香蕉,*,苹果],[peach],*,胡椒]
B=[甜,咸,苦,酸]
?您打算尝试的查询是什么?
更新(…)
…请在您的问题中显示它。您可以编辑它。不确定,我可以找到哪里更新我的问题,无论如何,这是我的目标。我有列表A=[[banana],列表B=[sweet,notsweet],目标=[[banana,sweet],[apple,notsweet]]。(使用列表2的元素更新列表2并在更新后返回结果。在问题文本下,您是否看到灰色的“共享编辑标志”字样?如果看到,请单击“编辑”。您是否键入了
list A=[[banana,*],[apple,*]],list B=[sweet,notsweet],goal=[[banana,sweet],[apple,notsweet]]
?将您的代码用反勾括起来
)`“
,否则,
*
之间的文本将以斜体显示(我键入了
“*斜体*”
)。您是否也会设想像
a=[[*,香蕉,*,苹果],[peach],*,胡椒]
B=[甜,咸,苦,酸]