gpt4 book ai didi

succ/2 的 Prolog 定义

转载 作者:行者123 更新时间:2023-12-02 01:05:46 25 4
gpt4 key购买 nike

我经常使用SWI-Prolog 的列表(谓词)功能。看看它如何实现它的一些谓词。我想确切地了解它对 succ/2 的作用,因为我在 SWI-Prolog 上使用它,但我也需要它与 Sicstus 一起运行,而 Sicstus 没有它!我已经在 SWI 手册中看到了它的作用,并尝试实现它,但我认为它必须在我尝试过的基础上做一些额外的事情。我的问题是列表功能只是给出

%国外:succ/2

大家有什么想法吗?

谢谢:)。

最佳答案

SWI 版本可能是用 C 实现的,以获得更好的性能。不是用 Prolog 编写的,使其变得外来,并且可能被认为是内置

这是我在 Prolog 中定义 SWI 的 succ/2 的尝试:

%%%% succ/2 to mimic the SWI Prolog built-in

succ(N0, N1) :-
( properly_grounded(N0)
-> N1 is N0 + 1
; properly_grounded(N1)
-> N1 > 0, N0 is N1 - 1
; otherwise
-> Ctx=context(succ/2,''),
throw(error(instantiation_error,Ctx))
).

properly_grounded(X):-
(var(X) -> false
;
( X >= 0
-> true
; otherwise
-> Ctx = context(succ/2,X),
E=domain_error(not_less_than_zero,X),
throw(error(E,Ctx));otherwise
)
).

如有必要,请将otherwise替换为true,将false替换为fail。该代码是在 SWI 中开发的,异常的上下文部分可能需要针对 SICStus 进行调整。

关于succ/2 的 Prolog 定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4234001/

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