История изменений
Исправление quasimoto, (текущая версия) :
функций, которые ничего не делают
Не ничего, а
строить некоторые выражения
Они это делают, то есть AST и т.п. строят.
Но это именно что «чистая».
Ну она чистая без всяких оговорок, по определению чистоты.
На самом деле ты очевидно плохо знаешь C++.
На самом деле достаточно такого примера, без Add : Expr, Fn : Expr, ..., Expr* f(Expr*, Expr*), просто потому что C++ не умеет в ADT¹, так что костыли наследованием и чистыми виртуальными функциями городить неохота, правильный пример я написал чуть выше (тут тебе и пример глобальной мутабельности, кстати).
То, что ты хочешь сделать, делается чистыми виртуальными функциями
¹) ADT в C++:
http://www.boost.org/doc/libs/1_55_0/doc/html/variant/tutorial.html
http://www.boost.org/doc/libs/1_55_0/libs/spirit/doc/html/index.html
http://www.boost.org/doc/libs/1_55_0/libs/spirit/example/qi/compiler_tutorial...
http://www.boost.org/doc/libs/1_55_0/libs/spirit/example/qi/compiler_tutorial...
а как же!? См. выше: построение дерева из Operator'ов это λ-абстракция, ну а вычисление получившего выражения — аппликация. Всё вместе даёт нам β-редукцию.
Это вряд ли, ты выше про такую грамматику говорил, как я понял
Op c ::= Op c + Op c | c
построение дерева это построение дерева, а не λ-абстракция, вычисление это редукция этого языка в c, не аппликация.
λ-исчисление начинается с чего-то вроде
T v ::= v | λ v . T v | (T v . T v)
где второе правило это абстракция (не построение дерева), третье — аппликация (не вычисление), а вот вычисление этих выражений в первые две формы — β-редукции (завершающиеся или нет).
Исправление quasimoto, :
функций, которые ничего не делают
Не ничего, а
строить некоторые выражения
Они это делают, то есть AST и т.п. строят.
Но это именно что «чистая».
Ну она чистая без всяких оговорок, по определению чистоты.
На самом деле ты очевидно плохо знаешь C++.
На самом деле достаточно такого примера, без Add : Expr, Fn : Expr, ..., Expr* f(Expr*, Expr*), просто потому что C++ не умеет в ADT¹, так что костыли наследованием и чистыми виртуальными функциями городить неохота, правильный пример я написал чуть выше (тут тебе и пример глобальной мутабельности, кстати).
То, что ты хочешь сделать, делается чистыми виртуальными функциями
¹) ADT в C++:
http://www.boost.org/doc/libs/1_55_0/doc/html/variant/tutorial.html
http://www.boost.org/doc/libs/1_55_0/libs/spirit/doc/html/index.html
http://www.boost.org/doc/libs/1_55_0/libs/spirit/example/qi/compiler_tutorial...
http://www.boost.org/doc/libs/1_55_0/libs/spirit/example/qi/compiler_tutorial...
а как же!? См. выше: построение дерева из Operator'ов это λ-абстракция, ну а вычисление получившего выражения — аппликация. Всё вместе даёт нам β-редукцию.
Это вряд ли, ты выше про такую грамматику говорил, как я понял
Op c ::= Op c + Op c | c
построение дерева это построение дерева, а не λ-абстракция, вычисление это редукция этого языка в c, не аппликация.
λ-исчисление начинается с чего-то вроде
T v ::= v | λ v . T v | (T v . T v) |
где второе правило это абстракция (не построение дерева), третье — аппликация (не вычисление), а вот нормализация этих выражений в первые две формы — β-редукции.
Исходная версия quasimoto, :
функций, которые ничего не делают
Не ничего, а
строить некоторые выражения
Они это делают, то есть AST и т.п. строят.
Но это именно что «чистая».
Ну она чистая без всяких оговорок, по определению чистоты.
На самом деле ты очевидно плохо знаешь C++.
На самом деле достаточно такого примера, без Add : Expr, Fn : Expr, ..., Expr* f(Expr*, Expr*), просто потому что C++ не умеет в ADT¹, так что костыли наследованием и чистыми виртуальными функциями городить неохота, правильный пример я написал чуть выше (тут тебе и пример глобальной мутабельности, кстати).
То, что ты хочешь сделать, делается чистыми виртуальными функциями
¹) ADT в C++:
http://www.boost.org/doc/libs/1_55_0/doc/html/variant/tutorial.html
http://www.boost.org/doc/libs/1_55_0/libs/spirit/doc/html/index.html
http://www.boost.org/doc/libs/1_55_0/libs/spirit/example/qi/compiler_tutorial...
http://www.boost.org/doc/libs/1_55_0/libs/spirit/example/qi/compiler_tutorial...
а как же!? См. выше: построение дерева из Operator'ов это λ-абстракция, ну а вычисление получившего выражения — аппликация. Всё вместе даёт нам β-редукцию.
Это вряд ли, ты выше про такую грамматику говорил, как я понял
Op c ::= Op + Op | c
построение дерева это построение дерева, а не λ-абстракция, вычисление это редукция этого языка в c, не аппликация.
λ-исчисление начинается с чего-то вроде
T v ::= v | \ v . T v | (T v) (T v) |
где второе правило это абстракция (не построение дерева), третье — аппликация (не вычисление), а вот нормализация этих выражений в первые две формы — β-редукции.