Chciałem móc sformułować algorytm wnioskowania typu tylnego milnera przy użyciu typów danych punktów stałych i schematów rekursji. Pomijając wszystkie szczegół oprócz rzeczywistych części rekursji:Algorytm W wykorzystujący schematy rekursji
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)
...
Algorytm buduje strukturę danych środowisko env
gdyż rekurencyjnie przemierza drzewa, aż osiągnie liście. Następnie używa tych informacji, ponieważ ponownie buduje wynik.
Bez części env
można to łatwo zaimplementować za pomocą cata
. Czy można to (z env
) zrobić ogólnie za pomocą schematów rekursji?
Tak, po prostu ustaw cel zestawu znaków jako 'Env -> a' – luqui
Tak, ale prawdopodobnie będziesz musiał użyć' cata' z typem nośnika wyższego rzędu, obliczając akcję, która może modyfikować środowisko i prawdopodobnie nie. – pigworker
Mam to. Geniusz. Dzięki – user47376