首页 > 解决方案 > PROLOG:推理过程,为什么返回false

问题描述

我有一个定义conc

conc([], L2, L2).
conc([X1|R1], L2, [X1|RN]) :-
   conc(R1, L2, RN).

我不明白为什么conc([X | green], Y, [red, green, blue]).返回false而不是

X = [red],
Y = [blue]

这里的推理过程是什么?

标签: prologinference

解决方案


免责声明:我不知道 Prolog。这个答案的其余部分是一个有根据的猜测。

您提出的解决方案X = [red]没有意义,因为这将构成X一个单元素列表。让我们假设

X = red

反而。

那会给我们

conc([red | green], [blue], [red, green, blue]).

随着第二个方程conc变成

conc(R1, L2, RN).
% with:
% X1 = red
% R1 = green
% L2 = [blue]
% [X1|RN] = [red, green, blue]
% i.e. X1 = red
%      RN = [green, blue]

IE

conc(green, [blue], [green, blue]).

现在我们陷入了困境,因为您的任何conc规则都不适用于green.

问题是[X | green]因为green不是列表的尾部。

你的意思是[X, green]相反吗?


推荐阅读