【问题标题】:PROLOG: process of inference, why returns falsePROLOG:推理过程,为什么返回false
【发布时间】:2018-06-05 17:51:50
【问题描述】:

我有一个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]

这里的推理过程是什么?

【问题讨论】:

    标签: prolog inference


    【解决方案1】:

    免责声明:我不知道 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]
    

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

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

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

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

    【讨论】:

      【解决方案2】:

      在 Prolog 列表表示法中,| 将左侧枚举的元素与右侧剩余元素的 列表 分开。问题出在您的查询中。你需要写[X | [green]][X,green] 而不是[X | green]。通过这些修复之一,您将获得正确的答案。例如

      ?- conc([X | [green]], Y, [red, green, blue]).
      X = red,
      Y = [blue].
      

      【讨论】:

        猜你喜欢
        • 2023-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-18
        • 1970-01-01
        • 1970-01-01
        • 2014-11-17
        • 2014-03-11
        相关资源
        最近更新 更多