2016-12-24 1 views
0

Ich habe einen Code geschrieben, der die Anzahl der Atome zählen soll, die addiert werden wie: a + b + c + d (Z sollte 4 sein).Atome in Prolog zählen

ist mein Code so weit:

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. 

Mein Problem ist, dass der Code gibt mir immer die Nummer 2. jemand wissen, wie dieses Problem beheben?

+1

Können Sie Beispiel liefern (n) dieses Prädikat verwendet wird, wie es * sollte * verhalten und was sie stattdessen tut? ("Code gibt 2" ist nicht sehr klar.) –

+0

Z sollte die Anzahl der Atome sein, und wenn Sie addieren (a + b + c + d, _, 1, Z), sollte das Programm Z = 4 aber stattdessen sagen es sagt Z = 2. – zer0kai

Antwort

1

Das Hauptproblem ist, dass ZZ immer 1 ist (das einzige, an das es jemals gebunden wird); Das ist gut, da Sie für beide Sub-Additionen dasselbe benötigen.

Ihr zweites Argument ist nur eine Kopie des ersten und dient keinem Zweck (zumindest in diesem Problem); Ähnlich ist es nicht klar, was die Rollen der 3. Argumente sind (3. hat die Zählung im Grundfall, aber 4. für die rekursive).

Reinigung alle, dass bis Blätter eines mit:

addition(X, 1) :- atom(X). 
addition(X+Y, ZZ) :- 
    addition(X, Z1), 
    addition(Y, Z2), 
    ZZ is Z1+Z2.