2013-05-20 4 views
7

में अभिव्यक्ति मूल्यांकन पेड़ आज एक परीक्षा में मुझे हास्केल में एक अभिव्यक्ति मूल्यांकन वृक्ष बनाने के लिए कहा गया था।हास्केल

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

और यह मूल्यांकन करने के लिए, तो आप सिर्फ एक समारोह में इस तरह के रूप में उपयोग: आमतौर पर जवाब के रूप में सरल रूप में है

data Op = Add 
     | Sub 
     | Mul 
:

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 

हालांकि आज, हम एक डेटा प्रकार दिए गए थे

तो मैंने अभिव्यक्ति वृक्ष बनाने के लिए माना कि मैं बस कर सकता हूं:

data Expr = Value Integer 
      | Op Expr Expr 

और उसी eval फ़ंक्शन का उपयोग करें। हालांकि, मैंने तब से उस समारोह को लिखा है और इसे जीएचसीआई में लोड किया है, लेकिन ऐसा लगता है कि यह काम नहीं कर रहा है। क्या कोई यह समझा सकता है कि यह क्यों काम नहीं करता है?

उत्तर

13

आप एक डेटा निर्माता (एक नाम उपलब्ध कराने)

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

तो

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

और इतने पर परिभाषित करना होगा।

:)

+0

अहह्ह ठीक है, बहुत बहुत धन्यवाद। अब स्पष्ट रूप से स्पष्ट है, लेकिन कई रचनाकारों को पहले से ही मुझे थोड़ा उलझन में मिला है। –

+4

आपका शिक्षक आपको सोचने के लिए मजबूर कर रहा है (न केवल याद रखें): डी – josejuan