2011-11-15 18 views
13

Tôi tự hỏi liệu có bất kỳ sự khác biệt nào về cách hai tính năng được triển khai dưới mui xe không? I E. Không chỉ trích dẫn mã được xây dựng trên đầu trang của cây biểu hiện tốt cũ?Trích dẫn mã và cây biểu thức

Cảm ơn.

Trả lời

20

Hai loại này khá giống nhau, nhưng chúng được trình bày khác nhau.

  • Báo giá được thiết kế theo cách chức năng hơn. Ví dụ: foo a b sẽ được trình bày dưới dạng một loạt các ứng dụng App(App(foo, a), b)

  • Báo giá có thể đại diện cho một số cấu trúc chỉ khả dụng trong F # và sử dụng cây biểu thức sẽ ẩn chúng. Ví dụ: có Expr.LetRecursive cho các tờ khai let rec

  • Báo giá được giới thiệu lần đầu tiên trong .NET 3.0. Quay lại thì các cây biểu thức chỉ có thể biểu diễn các biểu thức C#, do đó không thể dễ dàng nắm bắt tất cả các cấu trúc F # (các trích dẫn có thể nắm bắt bất kỳ biểu thức F # nào bao gồm các biểu thức bắt buộc).

  • Báo giá cũng được thiết kế để dễ dàng xử lý bằng cách sử dụng đệ quy. Mô-đun ExprShape chứa các mẫu cho phép bạn xử lý tất cả các trích dẫn có thể chỉ với 4 trường hợp (dễ dàng hơn nhiều so với việc triển khai mẫu khách truy cập với hàng chục phương thức trong C#).

Khi bạn có báo giá F #, bạn có thể dịch nó sang cây biểu thức C# sử dụng FSharp.Quotations.Evaluator. Điều này là khá hữu ích nếu bạn đang sử dụng một số NET API. Dự kiến ​​cây biểu hiện từ F #. Theo như tôi biết, không có bản dịch nào theo cách khác.