序言原子连接swi和yap序言



input:

run([p(X,Y,Z),h(Z,P,Q)],Out).
代码:

:- ensure_loaded(library(lists)).
run([X|Y],Out) :-
   X =.. [Fct|Args],
   X =..Total,
   length(Args,L),
   concat(abs_,L,Fct_A),
   Out =.. [Fct_A|Total].

在swi prolog上我得到了正确的答案:

A = abs_3(p, X, Y, Z).

on yap prolog失败。我应该使用yap

我要用什么代替concat(abs_,L,Fct_A) ?我尝试了atom_codes,但它在原子的末尾附加了奇怪的ASCII。

在这种情况下SWI是不正确的。目标atom_concat(a,1,X)必须根据ISO产生一个类型错误;IF, YAP, B, GNU, SICStus, XSB, Ciao都是这样的。ISO中有atom_chars/2number_chars/2。所以你需要的是

atom_number_concat(A, N, AN) :-
   number_chars(N, Chs),
   atom_chars(Na, Chs),
   atom_concat(A, Na, AN).

YAP有一个特殊的内置atom_number/2,它将取代前两个目标。

相关内容

  • 没有找到相关文章

最新更新