Zadania do wykładu 4.
|
Ewaluator, c.d. [Ocaml/Haskell]
Napisz ewaluator mini-języka funkcyjnego ze strategią aplikatywną (CBV), rozszerzającego rachunek lambda
o reprezentacje liczb całkowitych, operacje dodawania, mnożenia i odejmowania,
konstrukcję warunkową case (zamiast wartości logicznych, do rozgałęziania użyj
własności "jest zerem"/"nie jest zerem"), oraz o definicje funkcji rekurencyjnych (jak
na wykładzie).
- Użyj składni HOAS.
- Wartościami w tym języku są liczby całkowite oraz funkcje. Jak można reprezentować te wartości
w ewaluatorze?
- Zmodyfikuj ewaluator tak, by strategia języka definiowanego była lewostronna zewnętrzna (CBN).
Jak należy zmodyfikować typ wartości w Twojej reprezentacji w tym przypadku?
Zdefiniuj w języku definiowanym funkcję obliczającą silnię i przetestuj na niej ewaluator.
|
Maszyna abstrakcyjna [Ocaml/Haskell/Scheme]
Zaimplementuj maszynę abstrakcyjną ze środowiskiem dla języka z poprzedniego zadania.
Możesz zacząć od zaimplementowania odpowiedniej semantyki redukcyjnej, i przekształcenia
funkcji ewaluującej na funkcję przejścia maszyny przez odpowiednie przekształcenia programu.
|