2011-07-23 8 views
-1

入力:プロローグ原子連結SWIとヤッププロローグ

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

コード:SWIのプロローグに

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

私は正しい答えを得る:ヤップのプロローグに

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

は失敗します。私はyapを使うべきだと思った。

concat(abs_,L,Fct_A)の代わりに何を使用する必要がありますか?私はatom_codesを試しましたが、それは原子の終わりに奇妙なasciiを追加します。助けてください 。

答えて

2

この場合、SWIが正しくありません。目標atom_concat(a,1,X)は、ISOに従ってタイプエラーを生成する必要があります。 IF、YAP、B、GNU、SICStus、XSB、Ciaoはすべてそのように動作します。 ISOでは、atom_chars/2number_chars/2があります。だから、あなたが望むものであるYAPは、最初の2つのゴールに代わるビルトインatom_number/2特別なを持っている

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

+0

atomic_concatの仕事 –

+1

'atomic_concat/2'はうまくいくかもしれませんが、それはあなたにかなりの頭痛を与えます。 – false

関連する問題