繁体   English   中英

SWI-Prolog规则

[英]SWI-Prolog Rule

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

经过许多例子和混乱,我创造了这个规则。

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

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

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

切后fail ! 确保你的程序永远不会成功,因为你正在选择削减然后失败。

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

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

请注意,如果列表中没有正好三个元素,则此过程将失败。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM