Пролог Атом Конкат Swi и Yap Пролог - PullRequest
0 голосов
/ 23 июля 2011

вход:

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 пролог я получаю правильный ответ:

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

на прологе трепло. Видно, что я должен использовать трепло.

что я должен использовать вместо concat(abs_,L,Fct_A)? я попробовал atom_codes, но он добавляет странный ascii на конце атома пожалуйста, помогите.

1 Ответ

3 голосов
/ 23 июля 2011

В этом случае SWI неверен. Цель atom_concat(a,1,X) должна создать ошибку типа в соответствии с ISO; IF, YAP, B, GNU, SICStus, XSB, Ciao ведут себя именно так. В ISO есть 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, которая заменит первые две цели.

...