2011-07-23 4 views
-1
entrée

:atome Prolog concat SWI et Yap Prolog

run([p(X,Y,Z),h(Z,P,Q)],Out). 

Code:

:- 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]. 

sur Prolog SWI-je obtenir la bonne réponse:

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

sur Prolog YAP échouent. Vu que je devrais utiliser yap.

que dois-je utiliser au lieu de concat(abs_,L,Fct_A)? J'ai essayé atom_codes mais il ajoute des ascii étranges à la fin de l'atome. aidez s'il vous plaît.

Répondre

2

Dans ce cas, SWI est incorrect. L'objectif atom_concat(a,1,X) doit produire une erreur de type selon ISO; et SI, YAP, B, GNU, SICStus, XSB, Ciao se comportent tous comme ça. En ISO, il y a atom_chars/2 et number_chars/2. Donc ce que vous voulez est

atom_number_concat(A, N, AN) :- 
    number_chars(N, Chs), 
    atom_chars(Na, Chs), 
    atom_concat(A, Na, AN). 

YAP a intégré spécial atom_number/2 qui remplacerait les deux premiers buts.

+0

atomic_concat travail –

+1

'atomic_concat/2' peut fonctionner, mais cela vous donnera mal à la tête avec la frappe. – false