2011-07-23 9 views
0

私は入力してリストを取る、と私は、これは私のコードで出力プロローグ追加リスト

で、それは私がしたいこと別の要素の追加したい問題 あります

run([],L). 
run([X|Y],Lista) :- X =..Total, append(Total,Lista,ListaR), run(Y,ListaR), stamp(ListaR). 

stamp([]). 
stamp([X|Y]) :- nl, write(X), stamp(Y). 

私が実行した場合にそれに:

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

それがプリントアウトされます:

h 
_G238 
_G244 
_G245 
p 
_G236 
_G237 
_G238 
p 
_G236 
_G237 
_G238 
true. 

なぜ2時間p?なにが問題ですか?

_GXXXはあなたのためにそれを行うこの再帰関数append/3を記述する必要はありませんリストを追加するための変数...

答えて

1

それぞれの再帰レベルで結果を出力するので、pを2回印刷します。

run([],L) :- stamp(L). 
run([X|Y],Lista) :- X =..Total, append(Total,Lista,ListaR), run(Y,ListaR). 
+0

ありがとうございます。 –

+0

私のポストが実際にあなたの質問に答えたと思うなら、あなたはそれをマークとしてクリックして受け入れたものとしてマークするべきです。 – svick

+0

okでした...... –

1

です。

?- append([a,b],[k,l],NewList). 
NewList = [a, b, k, l]. 

しかし、私は、それはあなたの出力を与えるものではありませんが、再帰部分のリスト以上のものを印刷しているので、それが間違った結果を生成するSWI-プロローグで、あなたのコードを試してみました。あなたはそのようなものを試すことができます

run(List1,List2) :- append(List1,List2,ListResult), stamp(ListResult). 

希望に役立ちます。

+0

入力は次のとおりです。run([p(X、Y、Z)、h(Z、P、Q)]、[ ])。 –

+0

@ user448381入力がなくても質問に間違いがありますので、質問にも入力してください。スヴィックの答えは、あなたが望むことをするでしょう。 –