gpt4 book ai didi

prolog - 制作适用于 GNU 和 SWI 的 Prolog 代码

转载 作者:行者123 更新时间:2023-12-03 16:17:36 24 4
gpt4 key购买 nike

我意识到这会有限制,但是有没有一种合理的方法可以在 Prolog 代码中放入条件指令,以便在 GNU 或 SWI 中合理地工作?我至少在考虑最简单的情况,其中内置谓词,例如 sumlist在 SWI 和 sum_list在 GNU 中拼写不匹配。或者SWI有assert但 GNU 没有。所以最好有这样的东西:

:- if($SWI).
SWI version of stuff
:- else.
GNU version of stuff
:- endif.

或者干脆:
:- if(not_a_builtin(sumlist))
sumlist(L, S) :- sum_list(L, S).
:- endif.

或者什么不是。两种语言中都存在条件指令,但似乎只是提供了做这种事情所需的条件。我可能错过了手动搜索没有出现的东西。

最佳答案

最新版本的 GNU Prolog 和 SWI-Prolog 都定义了一个名为 dialect 的标志。 (顺便说一句,这是一个事实上的标准,因为它由大多数 Prolog 系统实现)您可以在条件编译指令中使用:

$ gprolog
GNU Prolog 1.4.4 (64 bits)
Compiled Apr 23 2013, 17:24:33 with /opt/local/bin/gcc-apple-4.2
By Daniel Diaz
Copyright (C) 1999-2013 Daniel Diaz
| ?- current_prolog_flag(dialect, Dialect).

Dialect = gprolog

yes

$ swipl
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 6.3.16-6-g9c0199c-DIRTY)
Copyright (c) 1990-2013 University of Amsterdam, VU Amsterdam
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

?- current_prolog_flag(dialect, Dialect).
Dialect = swi.

因此,简单地写一些类似的东西:
:- if(current_prolog_flag(dialect, swi)).

% SWI-Prolog specific code

:- elif(current_prolog_flag(dialect, gprolog)).

% GNU Prolog specific code

:- else.

% catchall code

:- endif.

关于prolog - 制作适用于 GNU 和 SWI 的 Prolog 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17034646/

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