LINUX.ORG.RU

История изменений

Исправление 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) |

где второе правило это абстракция (не построение дерева), третье — аппликация (не вычисление), а вот нормализация этих выражений в первые две формы — β-редукции.