Mit dem folgenden Beispiel wird der Stapel schnell aufgrund einer unendlichen Rekursion füllt ...Prolog unendliche Rekursion nicht den Stapel füllen?
is_pos_integer(X):- is_pos_integer(Y),X is Y+1.
is_pos_integer(0).
jedoch das folgende Beispiel bei der Ausführung und forderte einen Rückzieher (mit;), trifft die gleiche unendliche Rekursion ohne die oben Füllung Stapel ...
is_pos_integer(0).
is_pos_integer(X):- is_pos_integer(Y),X is Y+1.
ich glaube nicht, entweder Funktion Schwanz rekursiv ist, also warum würde die zweite nicht Ursache ein ........... Stackoverflow? (Yaaaaoww .... Sonnenbrille)
Auf welche Abfrage und welches Prolog-System? – Eyal
Ja, * weder Beispiel * ist Tail rekursiv! Und: Die Tail-Call-Optimierung gilt nur, wenn * keine Auswahlpunkte * übrig sind! Das erste Beispiel muss auch die Auswahlpunkte im Auge behalten. Noch eine elementare Anmerkung: Es ist normalerweise viel besser, positive Ganzzahlen mit den ** CLP (FD) ** - Einschränkungen Ihres Prolog-Systems zu beschreiben, zum Beispiel: 'positive_integer (I): - I #> 0.' – mat