Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我的规则应该将第一个参数与列表中的第三个元素统一起来。该列表是规则中的第二个参数。如果没有第三个元素,这应该会失败。
经过许多示例和混淆后,我创建了此规则。
third(X,[_|T]):- [_,Y] = T,!,fail, (Y,X).
所以我的理解,我认为是不正确的,它将 Y 设置为列表 T 的第三个元素,因为 T 是初始列表的尾部。然后它将 Y 与 X 统一。
仍然对“统一”这些元素的代码感到困惑
fail切割后!确保您的程序永远不会成功,因为您正在通过切割做出选择然后失败。
fail
!
仅当列表恰好具有三个元素时,您才可以尝试访问列表的第三个元素:跳过过程头部的第一个元素,然后从尾部获取第二个元素。
third(X,[_|T]):- [_,X] = T.
请注意,如果列表不包含恰好三个元素,则此过程将失败。
但是,直接访问过程头部的第三个元素更直接,例如:
third(X, [_, _, X|_]).
这会将 X 与来自第二个参数的列表的第三个元素统一起来。该|_部分允许列表具有更多元素(它将尾部与匿名变量统一)。
|_