代码之家  ›  专栏  ›  技术社区  ›  Paul Brinkley

自变量的析取应该返回什么?

  •  2
  • Paul Brinkley  · 技术社区  · 15 年前

    以下情况会产生什么结果:

    p(X,Y) :- q(X).
    p(X,Y) :- r(Y).
    q(a).
    r(b).
    

    我手边没有Prolog编译器,所以我无法测试如果你要求的话会发生什么 p(X,Y) p

    在现实世界中,我不认为 这很有道理(人们可能更愿意 p(X) q(X) r(X) 发生在这种堕落的情况下。

    2 回复  |  直到 15 年前
        1
  •  2
  •   starblue    15 年前

    p会返回两个答案,每个答案都有一个未绑定的变量吗?

    对你需要输入a;要查看进一步的解决方案:

    |?-p(X,Y)。

    Y=b

    对 | ?-

        2
  •  1
  •   John Boker    15 年前

    因此,p包含:

    p(X,Y) :- q(X).
    p(X,Y) :- r(Y).
    q(a).
    r(b).
    

    $ gprolog
    GNU Prolog 1.3.0
    By Daniel Diaz
    Copyright (C) 1999-2007 Daniel Diaz
    | ?- consult('so.p').
    compiling /home/jboker/Desktop/so.p for byte code...
    /home/jboker/Desktop/so.p:1: warning: singleton variables [Y] for p/2
    /home/jboker/Desktop/so.p:2: warning: singleton variables [X] for p/2
    /home/jboker/Desktop/so.p compiled, 5 lines read - 506 bytes written, 8 ms
    
    yes
    | ?- p(X,Y).
    
    X = a ?
    
    yes