首页 文章

prolog atom concat swi和yap prolog

提问于
浏览 23
0

输入:

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 回答

  • 3

    在这种情况下,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 ,它将取代前两个目标 .

相关问题