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

可移植性是Prolog的最弱点之一 - ISO标准定义了current_prolog_flag / 2,但没有列出'name'实现的标志 .

我使用以下代码在SWI和YAP之间切换

swi :- prolog_impl(swi).

yap :- prolog_impl(yap).

prolog_impl(K) :-

F =.. [K,_,_,_,_],

current_prolog_flag(version_data, F).

然后就像使用它一样

:- if(swi).

gen_hash_lin_probe(Key, HashTable, Value) :-

arg(_, HashTable, E),

nonvar(E),

E = Key-Value.

:- elif(yap).

gen_hash_lin_probe(Key, HashTable, Value) :-

HashTable =.. [htlp|Args],

nth1(_, Args, E),

nonvar(E),

E = Key-Value.

:- endif.

但是GNU没有定义 version_data . 然后该代码应该或多或少地扩展

...

catch(current_prolog_flag(version_data,F),_,K = gnu).

(注意:未经测试)

为了测试内置的存在,有predicate_property / 2(AFAIK而不是ISO),你需要像往常一样试验确定实际行为 .

OT:不推荐使用sumlist / 2,有sum_list / 2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值