2016-12-24 8 views
0

a + b + c + d(Zは4にする必要があります)のように一緒に追加される原子の量を数えるコードを記述しました。プロローグ内の原子数をカウントする

私のコードは、これまでのところです:

addition(X, X, 1, _) :- 
    atom(X). 
addition(X+Y, X1+Y1, ZZ, Z) :- 
    addition(X, X1, ZZ, Z), 
    addition(Y, Y1, ZZ, Z), 
    Z is ZZ + 1. 

私の問題は、コードはいつも私に2.誰かがこの問題を解決する方法を知っている番号を与えることでしょうか?

+1

は、あなたはそれが* *どのように振る舞うべきか、そして、それは代わりに何をするか、この述語を使用する例(複数可)を提供することはできますか? –

+0

Zは原子の数でなければならず、(a + b + c + d、_、1、Z)加算を求めるならば、プログラムはZ = 4と言うべきですが代わりにそれはZ = 2と言います。 – zer0kai

答えて

1

主な問題は、ZZは常に1(これまでにバインドされた唯一のもの)です。これは両方のサブ追加で同じものにする必要があるため、幸いです。

2番目の引数は最初の引数のコピーに過ぎず、目的はありません(少なくともこの問題では)。同様に、第3の引数の役割がどのようなものであるのかは不明である(第3は基本ケースのカウントを有するが、第4引数は再帰的カウントのカウントを有する)。葉1そのすべてをクリーンアップ

addition(X, 1) :- atom(X). 
addition(X+Y, ZZ) :- 
    addition(X, Z1), 
    addition(Y, Z2), 
    ZZ is Z1+Z2. 
関連する問題