Trả lời

2

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.

+0

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). –

4

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.

1

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ó.

+1

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 –

21

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.

+0

Hahaha. .. Tôi tự hỏi nếu có ai khác sẽ nhận được nó. – TraumaPony

+0

lol - rất tốt. –

+0

Gần đít ... tốt nhất. :) –

Các vấn đề liên quan