prolog原子concat swi和yap prolog

prolog原子concat swi和yap prolog,prolog,iso-prolog,yap,Prolog,Iso Prolog,Yap,输入: 代码: 在swi prolog上,我得到了正确的答案: :- 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]. 在yap prolog上失败。我知道我应该用yap 我必须用什么来代替concat(abs,L,Fct,A)?我尝试

输入:

代码:

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

:- 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].
在yap prolog上失败。我知道我应该用yap


我必须用什么来代替concat(abs,L,Fct,A)?我尝试了atom_代码,但它在atom的末尾附加了奇怪的ascii码。请帮助。

在这种情况下,SWI不正确。原子(a,1,X)的目标必须根据ISO产生类型错误;如果,是的,B,GNU,SICStus,XSB,Ciao都是这样的。在ISO中,有
原子字符/2
数字字符/2
。所以你想要的是

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

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

在这种情况下,SWI是不正确的。原子(a,1,X)的目标必须根据ISO产生类型错误;如果,是的,B,GNU,SICStus,XSB,Ciao都是这样的。在ISO中,有
原子字符/2
数字字符/2
。所以你想要的是

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

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

atomic\u concat/2
可能会工作,但它会让你在打字时感到相当头痛。
atomic\u concat/2
可能会工作,但会让你在打字时感到相当头痛。
atom_number_concat(A, N, AN) :-
   number_chars(N, Chs),
   atom_chars(Na, Chs),
   atom_concat(A, Na, AN).