Como están en .Net 3.5. Sé que están en 4.0, ya que es con lo que trabaja DLR, pero estoy interesado en la versión que tenemos ahora.¿Están terminados los árboles de expresión de LINQ Turing?
Respuesta
Los árboles de expresión LINQ pueden representar cualquier cosa que pueda poner en una expresión C# normal. Como tal, no se pueden usar para representar directamente los bucles while
, for
bucles, etc.
Sin embargo, teóricamente es posible utilizar expresiones lambda y recursión para llevar a cabo cualquier iteración que pueda necesitar. En la práctica, puede ser más fácil eliminar los métodos Enumerable
en su árbol.
Sin definir lo que ejecutará el árbol, no lo sabemos. En la propia interpretación del CLR (cuando los compila en delegados) lo son. Pero si los traduce a SQL, no lo son, y puede inventar su propia interpretación confusa de ellos con las propiedades que desee.
Hasta que haya decidido cómo interpretarlos, solo son estructuras de datos.
Bueno, ¿por qué no intentas probarlo? Apuesto a que es un desafío divertido;)
Pero los árboles de expresión solo representan una expresión y, por lo tanto, tendrás que definir lo que puedes hacer, como afirma Earwicker.
Si permite que los árboles de expresión usen la recursión puede lograr la repetición, es decir, para bucles y demás.
Sin embargo, el cálculo lambda sin tipo es Turing-completo Complejidad-Turing # Ejemplos pero el cálculo Lambda no permite la recursión per se Lambda_calculus # Recursion todo es muy incierto.
Concluiré que la expresión probablemente sea Turing completa pero requerirá que alguien que esté más familiarizado con esto lo confirme.
No tiene que "permitir" que los árboles usen recursión; ya pueden ser: http://blogs.msdn.com/madst/archive/2007/05/11/recursive-lambda-expressions.aspx –
En el primer borrador de la especificación C# 3.0 había un comentario en el margen de la sección sobre los árboles de expresión que dijo:
tengo una demostración verdaderamente maravillosa de Turing-completo pero este margen es demasiado estrecho para contener.
Lamentablemente, nadie ha sido capaz de averiguar quién lo escribió o desarrollar la prueba.
Hahaha. Me pregunto si alguien más lo obtendrá. – TraumaPony
lol - muy bueno. –
Cerca de spit-take ... bueno. :) –
- 1. ¿Los árboles de expresión LINQ son árboles apropiados?
- 2. Aprendizaje de árboles de expresión en LINQ
- 3. Convertir árboles de expresión
- 4. ¿Están terminados los argumentos char * argv [] en null principal?
- 5. Construyendo árboles de expresión
- 6. Buscando idiomas que no están completos Turing
- 7. el enlace de parámetros en los árboles de expresión
- 8. Uso práctico de árboles de expresión
- 9. Unidad de árboles de expresión Pruebas
- 10. ¿Quizás la mónada usa árboles de expresión?
- 11. Variable local y árboles de expresión
- 12. Asignación en árboles de expresión .NET 3.5
- 13. Árboles de expresiones Java
- 14. Heurística para "esto" y cierres ¿está bien? (árboles de expresión)
- 15. ¿Qué son los árboles de expresión, cómo los usa y por qué los usaría?
- 16. serializar y deserializar expresión Árboles en C#
- 17. Imprime expresión LINQ vista de jerarquía
- 18. Haskell Mapa de los Árboles
- 19. Árboles de expresión de compilación para representar if-else
- 20. C# 4.0: Árboles de expresión frente a CodeDom
- 21. ¿Algún algoritmo rápido para árboles de expansión mínima cuando las longitudes de los bordes están restringidas?
- 22. Expresión de Linq con nullable
- 23. Buscando un compilador de expresión de C# => Linq
- 24. parametrizado LINQ Expresión Ayuda
- 25. LINQ expresión lista anidada
- 26. String.IsNullOrWhiteSpace en LINQ Expresión
- 27. Diferencia entre los árboles de AVL y los árboles de separación
- 28. Análisis de una expresión de Linq
- 29. ¿Los archivos MAKE están completos?
- 30. ¿Por qué los árboles de expresión son más seguros que la reflexión?
Los árboles de expresión LINQ no son compatibles con la recursividad, por lo que su única opción parece ser recurrir al boxeo y un combinador y, que será muy lento (una asignación por llamada a función). –