Pull to refresh

Comments 2

У меня вопрос по коду. Насколько я могу видеть, вы полагаетесь на то, что имена переменных уникальны и не учитываете, что имена аргументов вложенных лямбд могут затенять имена аргументов обрамляющих функций.


И этой действительно проблема. Скажем, если в окружение добавить факт, что имя "y" имеет тип "int", то для такого выражения:


(\x.x)(y)

ваш алгоритм корректно выводит тип выражения, как int, но для чуть более сложного


(\y.y)(y)

выводит неправильный Variable(TypeVariable(1)).

Да, вы правы! Я указал, что подход работы с окружением еще очень простой. Здесь для простоты сделано пока так. Я просто пранировал сделать это в следующей статье.

Sign up to leave a comment.

Articles