2013-05-20 64 views
7

Trong bài kiểm tra hôm nay, tôi đã được yêu cầu tạo một cây đánh giá biểu thức trong Haskell. Thường thì câu trả lời là đơn giản như:Cây đánh giá biểu thức trong Haskell

data Expr = Value Integer 
      | Add Expr Expr 
      | Sub Expr Expr 
      | Mul Expr Expr 

Và để đánh giá nó, bạn chỉ cần sử dụng một chức năng như:

eval :: Expr -> Integer 
eval (Value x) = x 
eval (Add l r) = eval l + eval r 
eval (Sub l r) = eval l - eval r 
eval (Mul l r) = eval l * eval r 

Tuy nhiên ngày hôm nay, chúng tôi đã đưa ra một kiểu dữ liệu:

data Op = Add 
     | Sub 
     | Mul 

Vì vậy, tôi giả định tạo cây biểu thức mà tôi có thể thực hiện:

data Expr = Value Integer 
      | Op Expr Expr 

Và sử dụng cùng chức năng eval. Tuy nhiên, tôi đã viết hàm đó và nạp nó vào GHCI, nhưng nó dường như không hoạt động. Có ai giải thích tại sao điều này không hiệu quả?

Trả lời

13

Bạn phải xác định một constructor dữ liệu (cung cấp một tên)

data Expr = Value Integer | Compute Op Expr Expr 
          ^^^^^^^ 

sau đó

eval :: Expr -> Integer 
eval (Value x) = x 
eval (Compute Add l r) = eval l + eval r 

và vân vân.

:)

+0

Ahhhhhh ok, cảm ơn bạn rất nhiều. Rất rõ ràng bây giờ, nhưng có nhiều nhà thầu đã khiến tôi bối rối một chút. –

+4

Giáo viên của bạn là tốt buộc bạn phải suy nghĩ (không chỉ nhớ): D – josejuan

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