【问题标题】:SWI-Prolog RuleSWI-Prolog 规则
【发布时间】:2012-10-23 17:14:29
【问题描述】:

我的规则应该将列表中的第一个参数与第三个元素统一起来。该列表是规则中的第二个参数。如果没有第三个元素,这应该会失败。

经过许多示例和混淆后,我创建了此规则。

third(X,[_|T]):-
    [_,Y] = T,!,fail,
    (Y,X).

所以我的理解是不正确的,它将 Y 设置为列表 T 的第三个元素,因为 T 是初始列表的尾部。然后它将 Y 与 X 统一。

仍然对“统一”这些元素的代码感到困惑

【问题讨论】:

    标签: list prolog


    【解决方案1】:

    剪切后的fail ! 确保您的程序永远不会成功,因为您正在通过剪切提交选择然后失败。

    只有当列表恰好包含三个元素时,您才可以尝试访问列表的第三个元素:跳过过程头部的第一个元素,然后从尾部获取第二个元素。

    third(X,[_|T]):-
        [_,X] = T.
    

    请注意,如果列表不包含恰好三个元素,此过程将失败。

    但是,直接访问过程头部的第三个元素更直接,例如:

    third(X, [_, _, X|_]).
    

    这会将 X 与来自第二个参数的列表的第三个元素统一起来。 |_ 部分允许列表包含更多元素(它将尾部与匿名变量统一)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-06
      • 1970-01-01
      • 2016-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-22
      • 1970-01-01
      相关资源
      最近更新 更多