因为他们在.net 3.5。我知道他们在4.0,因为这是DLR的工作原理,但我对现在的版本很感兴趣。LINQ表达式树Turing是否完整?
回答
LINQ表达式树可以表示任何可以放入普通C#表达式的东西。因此,它们不能用来直接表示while
循环,for
循环等
然而,这是理论上可以使用lambda表达式和递归执行可能需要的任何迭代。在实践中,将Enumerable
方法放入树中可能会更容易。
没有定义执行树的东西,我们不知道。在CLR自己的解释中(当你将它们编译成代表时)是这样的。但是,如果你将它们翻译成SQL,那么它们不是,你可以用你喜欢的任何属性来发明你自己的混淆解释。
在你决定如何解释它们之前,它们只是数据结构。
那么,你为什么不试图证明它呢?我敢打赌,这是一个有趣的挑战;)
但表达式树只代表一个表达式,因此你必须定义你允许做什么,如Earwicker所述。
如果允许表达式树使用递归,则可以实现重复,即循环等。
但是,无类型的lambda微积分是图灵完全的Turing_completeness#示例,但Lambda微积分不允许递归本身Lambda_calculus#递归它都是非常冒险的。
我会得出结论表达可能是图灵完成,但它会需要一个更熟悉这个来确认它的人。
您不必“允许”树使用递归 - 它们已经可以是:http://blogs.msdn.com/madst/archive/2007/05/11/recursive-lambda-expressions.aspx – 2009-03-31 07:25:03
在C#3.0规范有在表达式树的部分提到保证金注释的早期草案:
我有图灵完备的真正奇妙的证明此幅度过遏制。
可悲的是,没有人能够找出谁写的或发展证明。
哈哈哈。 ..我想知道是否有人会得到它。 – TraumaPony 2009-01-07 23:55:26
- 1. 表达式树的MongoDB LINQ
- 2. VisualBasic到Linq表达式树
- 3. LINQ表达式树和Monotouch链接器
- 4. 在Linq的表达式树到实体
- 5. 在LINQ中学习表达式树
- 6. 有条件的Linq表达式树
- 7. Compact框架中的Linq表达式树
- 8. Linq表达式树字符串比较
- 9. 转换LINQ到SQL表达式表达式树
- 10. 表达式树
- 11. LINQ:什么是表达式树的语法交叉连接
- 12. 建立'平'而不是'树'LINQ表达式
- 13. 设置对象属性的Linq表达式树是什么?
- 14. LINQ表达式
- 15. Java表达式树
- 16. lambda表达式树
- 17. 如何评估LINQ表达式树中的独立布尔表达式
- 18. LINQ是否有可能通过LINQ表达式树得到没有返回类型的方法名?
- 19. Linq Lambda表达式
- 20. LINQ表达式resquested
- 21. 如何使用LINQ表达式树连接到另一个表?
- 22. FormatterServices.GetUninitializedObject()是否存在等价的表达式树?
- 23. 正则表达式返回完整的行而不是匹配
- 24. 如何使用LINQ树表达
- 25. LINQ - 表达的拆卸零部件树
- 26. LINQ表达式中的值是否通过引用传递?
- 27. 以下Lambda和Linq表达式是否相同?
- 28. 使用Linq检查布尔表达式是否为真
- 29. linq表达式是如何构建的?
- 30. 这是什么LINQ表达式
LINQ表达式树不支持递归,所以你唯一的选择似乎是诉诸拳击和y- combinator,这将是非常缓慢的(每个函数调用分配)。 – 2010-02-15 18:26:31