Vì chúng ở trong .Net 3.5. Tôi biết họ đang ở 4.0, vì đó là những gì DLR làm việc với, nhưng tôi quan tâm đến phiên bản chúng tôi có bây giờ.Các cây biểu hiện LINQ có hoàn thành không?
Trả lời
Cây biểu thức LINQ có thể đại diện cho bất kỳ thứ gì bạn có thể đặt trong biểu thức C# bình thường. Như vậy, họ không thể được sử dụng để trực tiếp đại diện while
vòng, for
vòng vv
Tuy nhiên, đó là trên lý thuyết có thể sử dụng các biểu thức lambda và đệ quy để thực hiện bất kỳ lặp bạn có thể cần. Trong thực tế, có thể dễ dàng thả các phương thức Enumerable
vào cây của bạn.
Không định nghĩa điều sẽ thực thi cây, chúng tôi không biết. Trong cách giải thích của CLR (khi bạn biên dịch chúng thành các đại biểu) chúng là như thế. Nhưng nếu bạn dịch chúng thành SQL, chúng không phải, và bạn có thể phát minh ra cách giải thích khó hiểu của riêng bạn về chúng với bất kỳ thuộc tính nào bạn thích.
Cho đến khi bạn quyết định cách diễn giải chúng, chúng chỉ là cấu trúc dữ liệu.
Vâng, tại sao bạn không thử chứng minh điều đó? Tôi đặt cược đó là một thử thách thú vị;)
Nhưng cây biểu thị chỉ biểu thị một biểu thức và vì vậy bạn sẽ phải xác định những gì bạn được phép làm, như Earwicker đã nêu.
Nếu bạn cho phép cây biểu thức sử dụng đệ quy, bạn có thể đạt được sự lặp lại tức là đối với các vòng lặp và như vậy.
Tuy nhiên, tính toán lambda chưa được phân tích là Turing-complete Turing_completeness # Ví dụ, nhưng phép tính Lambda không cho phép đệ quy cho mỗi lambda_calculus # Recursion tất cả đều rất dicey.
Tôi sẽ kết luận rằng biểu thức có thể là Turing hoàn chỉnh nhưng nó sẽ yêu cầu một người quen thuộc hơn với điều này để xác nhận nó.
Bạn không phải "cho phép" cây sử dụng đệ quy - chúng có thể là: http://blogs.msdn.com/madst/archive/2007/05/11/recursive-lambda-expressions.aspx –
Trong dự thảo đầu tiên của spec C# 3.0 đã có một bình luận ở bên lề của bộ phận trên cây biểu hiện những gì đã nói:
Tôi có một bằng chứng bàn thắng tuyệt đẹp của Turing-đầy đủ mà lề này là quá hẹp để chứa.
Đáng buồn là không ai có thể tìm ra ai đã viết hoặc phát triển bằng chứng.
Hahaha. .. Tôi tự hỏi nếu có ai khác sẽ nhận được nó. – TraumaPony
lol - rất tốt. –
Gần đít ... tốt nhất. :) –
- 1. Cây LINQ có phải là cây thích hợp không?
- 2. Cây biểu hiện LINQ trong khung nhỏ gọn
- 3. Tạo một cây biểu hiện trong C#
- 4. Cây biểu thức Java
- 5. Xác định sự kiện qua cây biểu thức LINQ
- 6. Xây dựng 'phẳng' thay vì 'cây' biểu thức LINQ
- 7. Emacs ruby biểu tượng từ hoàn thành
- 8. Chuyển đổi biểu thức lambda vào một cây biểu
- 9. Kết hợp các biểu thức trong cây biểu thức
- 10. Đi qua một cây biểu hiện như một tham số khác cây biểu
- 11. Phát hiện các lớp biên dịch được tạo ra một cách đáng tin cậy trong các cây biểu hiện C#
- 12. C# Phương pháp động - IL vs cây biểu hiện
- 13. Xây dựng truy vấn LINQ GroupBy bằng cách sử dụng các cây biểu thức
- 14. LINQ nhóm theo cú pháp biểu hiện
- 15. Kiểm tra loại đúc trong một cây biểu hiện?
- 16. Tự động hoàn thành = "tắt" có tương thích với tất cả các trình duyệt hiện đại không?
- 17. Razor View Engine: Một cây biểu hiện có thể không chứa một hoạt động năng động
- 18. Lỗi: Một cây biểu hiện có thể không chứa một hoạt động năng động
- 19. Làm thế nào để xác định liệu cây nhị phân có hoàn thành?
- 20. Chuyển đổi LINQ thành XSLT
- 21. Không thể phát hiện hoàn thành TTS (gọi lại) android.
- 22. NativeActivity không hoàn thành
- 23. Xây dựng một cây biểu thức LINQ: làm thế nào để có được biến trong phạm vi
- 24. Phát hiện hoàn thành Hoạt ảnh
- 25. Cây biểu thức - chuyển đổi không cần thiết sang int32
- 26. Phát hiện khi BaseAdapter.notifyDataSetChanged() hoàn thành
- 27. Cách phát hiện khi innerHTML hoàn thành
- 28. Làm cách nào để soạn các Biểu thức LINQ hiện có
- 29. Thêm một nút/thuộc tính vào một cây biểu hiện
- 30. Cách kiểm tra xem xác thực biểu mẫu html5 có hoàn thành không
Cây biểu thức LINQ không hỗ trợ đệ quy để lựa chọn duy nhất của bạn có vẻ là để nghỉ mát đến đấm bốc và y combinator, mà sẽ rất chậm (một phân bổ cho mỗi cuộc gọi chức năng). –