gpt4 book ai didi

Prolog箭头运算符

转载 作者:行者123 更新时间:2023-12-03 15:31:11 27 4
gpt4 key购买 nike

| ?- true ; (true->false)
yes
| ?- (true->false) ; true.
no
| ?- false ; true.
yes

据我了解,"is"/“否”结果告诉用户查询是否成功。查询对谓词 true总是成功的,而对 false总是失败的。
  • ,因为;/2表示OR(可交换),因此前两个查询应等效(均成功)
  • 在谓词逻辑中,公式(true->false)false的计算结果为FALSE,因此最后两个查询应等效于

  • 因此:第二个查询似乎与理论逻辑不一致

    我的推理有误吗?我觉得我对基本的东西不了解。

    最佳答案

    这个问题问得好。

    只是为了详细说明@larsmans的答案,当->/2谓词与if-then-else谓词结合使用时,它就充当了;/2。它本身就是if-then

    查看if-then-else构造,在GNU Prolog manual says中给出描述:

    ->/2 is often combined with ;/2 to define an if-then-else as follows: Goal1 -> Goal2 ; Goal3. Note that Goal1 -> Goal2 is the first argument of the (;)/2 and Goal3 (the else part) is the second argument. Such an if-then-else control construct first creates a choice-point for the else-part (intuitively associated with ;/2) and then executes Goal1. In case of success [of Goal1], all choice-points created by Goal1 together with the choice-point for the else-part are removed and Goal2 is executed. If Goal1 fails then Goal3 is executed.



    在这种情况下,我们有:
    (true -> false) ; true

    第一个 trueGoal1,它成功。一旦发生这种情况,就会根据谓词行为的描述,删除将导致您进入第二个 true语句( Goal3)的选择点。因此,当遇到 false时,将发生失败,并且不会回溯到第二个 true,并且整个查询都会失败。

    但是,如果您执行了以下操作:
    foo :-
    true -> false.
    foo :-
    true

    第一个 foo子句失败后会有一个选择点,因此您得到:
    | ?- foo.
    yes.

    我认为混淆源于将 false ; true(true -> false) ; true进行比较。类似于 (true -> false) ; true的表达式是:
    (true, !, false) ; true

    由于 false的工作原理,该值也将评估为 ;。在第一个子句失败的情况下, ;提供了一个选择点。但是,如果第一个子句有一个裁切符并消除了选择点,则将不会采用它,并且查询将整体失败。

    关于Prolog箭头运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21064150/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com