Я написал (для прикола) интерпретатор лямбда-исчисления на шаблонах. Вроде всё окей. Написал арифметики и функцию вычисления факториала. Написал Y-комбинатор и попробовал вызвать факториал... не компилируется (километр ошибок, так что я пока не особо понял, где прокол). Написал через Z-комбинатор — компилятор уходит в бесконечный цикл. Код здесь, компилить с -std=c++11.
Кажется, проблема в ненормальном (во всех смыслах) порядке раскрытия шаблонов и отсутствии их унификации. Пока я раскуриваю стандарт на эту тему, вот вам вопрос: можно ли написать на шаблонах C++ вычислитель лямбда-термов, выполняющий редукцию в нормальном порядке, дабы рекурсия нормально работала?
(В теории типов и прочем борще не шарю. Может, проблема как раз в попытке погрузить бестиповое лямбда-исчисление в систему типов C++.)
/cast anonymous