输入:
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).
在yap prolog失败 . 看到我应该使用yap .
我必须使用而不是 concat(abs_,L,Fct_A)
?我尝试了atom_codes,但它在原子的末尾添加了奇怪的ascii . 请帮忙 .
1 回答
在这种情况下,SWI不正确 . 目标
atom_concat(a,1,X)
必须根据ISO产生类型错误;和IF,YAP,B,GNU,SICStus,XSB,Ciao都表现得那样 . 在ISO中,有atom_chars/2
和number_chars/2
. 所以你想要的是YAP有一个特殊的内置
atom_number/2
,它将取代前两个目标 .