输入:
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。请帮帮忙。
发布于 2011-07-24 03:51:45
在这种情况下,SWI是错误的。目标atom_concat(a,1,X)必须根据ISO产生一个类型错误;IF,YAP,B,GNU,SICStus,XSB,Ciao都是这样的。在国际标准化组织中,有atom_chars/2和number_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,它将取代前两个目标。
https://stackoverflow.com/questions/6802721
复制相似问题