gpt4 book ai didi

prolog - 如何确定 prolog `compund term` 内部是否有特定的 `atom`?

转载 作者:行者123 更新时间:2023-12-04 05:54:50 25 4
gpt4 key购买 nike

我想要一个谓词来判断一个特定的原子(比如 x)是否出现在复合术语中,无论嵌套有多深。

我试图阅读 https://www.swi-prolog.org/pldoc/man?section=manipterm 给出的谓词.我认为这将涉及使用 functor/3../2 递归地遍历复合术语。有没有更简单的方法,或者有一些库可以做到这一点?

最佳答案

Carlo 的优雅答案适用于 SWI-Prolog 但不可移植,因为 arg/3 谓词(大多数 Prolog 系统实现)的 ISO Prolog 标准规范要求其第一个参数绑定(bind)到一个整数,防止将其用作复合术语参数的可回溯生成器。一个更便携的替代方案是:

haystack_needle(H, N) :-
H == N.
haystack_needle(H, N) :-
functor(H, _, A),
between(1, A, I),
arg(I, H, A),
haystack_needle(A, N).

between/3 谓词未在 ISO Prolog 标准中指定,但它是事实上的标准谓词,通常作为内置谓词或库谓词提供。

关于prolog - 如何确定 prolog `compund term` 内部是否有特定的 `atom`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57602541/

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