CLP (FD) -ying Simultane Rekursion für Fibonacci Lukas Zahlen möglich?

9

Es gibt einige Instanzen , in denen rekursive Prädikate vorkommen können CLP (FD) - mit dem Vorteil, dass das Prädikat bidirektional wird. Was sind die Grenzen dieser Methode? Zum Beispiel kann die folgende Berechnung CLP (FD) -fied:

%Vor%

Durch diesen doppelten Rekursionsschritt:

%Vor%

Und dieser inkrementierende Rekursionsschritt:

%Vor%

Die traditionelle Prolog Umsetzung funktioniert bereits von n bis Fn. Kann man daraus ein CLP (FD) Programm machen, das die schnelle Rekursion beibehält und gleichzeitig bidirektional macht, zB den Index n für Fn = 377 ermitteln? Wenn ja wie? Wenn nicht warum?

Tschüss

    
j4n bur53 28.03.2016, 14:29
quelle

1 Antwort

4

Ja, dies kann durch Beschränkung der Werte erfolgen. Sie können die Rekursion auch als Tail-Rekursion verwenden, obwohl die Lösungen nicht benötigt werden:

%Vor%

Wird ergeben:

%Vor%

Dies könnte geändert werden, um Ergebnisse für steigende Werte von N zu generieren, wenn N nicht instantiiert ist.
Hier ist ein zeitgesteuertes, zusammengesetztes Abfrage-Beispiel, das in SWI Prolog 7.1.33 unter Linux ausgeführt wird:

%Vor%

Wenn Sie SWI Prolog 7.2.3 mit demselben Code oben und derselben zusammengesetzten Abfrage verwenden, geht der Code sehr lange aus. Ich habe mindestens 15 Minuten ohne Kündigung gewartet. Es läuft noch immer ... Ich werde es morgens überprüfen. :)

Ich habe jedoch den obigen Code neu angeordnet, um den rekursiven Aufruf an den ursprünglichen Code zurückzuversetzen:

%Vor%

In diesem Fall kehrten die günstigen Ergebnisse zurück:

%Vor%

Beachten Sie, dass die Leistung von CLP (FD) zwischen verschiedenen Prolog-Interpretern sehr unterschiedlich sein kann. Es ist interessant, dass mit SWI Prolog die Fähigkeit, den tail rekursiven Fall zu behandeln, vorübergehend mit Version 7.1.33 vorhanden war.

    
lurker 28.03.2016 15:27
quelle

Tags und Links