Ich wollte in der Lage sein, den Inferenzalgorithmus nach Hindley-Milner mit Festkomma-Datentypen und Rekursionschemata zu formulieren. alle Details neben den eigentlichen Rekursion Teile Ohne Berücksichtigung: bautAlgorithmus W unter Verwendung von Rekursionschemata
w env term = case term of
Lam n e -> lam (w (modify1 env) e)
App a b -> app (w (modify2 env) a) (w (modify3 env) b)
...
Der Algorithmus eine Umgebungsdatenstruktur env
wie es rekursiv den Baum durchläuft, bis er die Blätter erreicht. Dann verwendet es diese Information, da es das Ergebnis wieder aufbaut.
Ohne den env
Teil könnte dies einfach mit cata
implementiert werden. Kann dies (mit env
) im Allgemeinen unter Verwendung von Rekursionschemata durchgeführt werden?
Ja, nur das Ziel der cata eine Funktion 'Env -> a' – luqui
Ja, aber Sie müssen wahrscheinlich' cata' mit einem Träger-Typ höherer Ordnung verwenden, eine Aktion berechnen, die die Umgebung ändern kann und möglicherweise scheitern. – pigworker
Verstanden. Genius. Danke – user47376