2012-04-08 7 views
2

Nun, da ich heute "die Prolog-Logik" praktiziere und ich dieses unbeantwortete Problem in einem anderen Thread hier fand, fragte ich mich, wie es funktioniert.Inkrementelle Elemente in SWI-Prolog

Schritt jedes Element der Liste durch seine Tiefe, zB Schritt ([0,0, [0]], [1,1, [2]]) -> true

Und ich fast gedacht, dass ich diese Sprache mag ... :)) Ist so etwas möglich? Vielen Dank.

+0

zu testen, ob Sie es erhalten und die Frage beantworten, ich werde Sie sicher upvote :) – CapelliC

+0

seine möglich, aber für sicher, es wird nicht kurz sein Prädikat – whd

+0

vier Klauseln unten scheinen ziemlich kurz zu sein –

Antwort

2

Der folgende Code macht den Job:

increment(X,Y):- increment(X,0,Y). 
increment([],_,[]) :- !. 
increment([X|Xs],N,[Y|Ys]) :- !, N1 is N+1, 
           increment(X,N1,Y), increment(Xs,N,Ys). 
increment(X,N,Y):- Y is X+N. 

einfach es

?- increment([0,0,[0]],X). 
X = [1, 1, [2]]. 

?- increment([0,0,[0,[0,0]]],X). 
X = [1, 1, [2, [3, 3]]]. 
+0

Wow, schlau! Ich habe Ihnen eine E-Mail geschickt, Sir @Alexander –

+0

Ich werde versuchen, es heute Abend zu beantworten, Sir @Norbert ;-) –