मैं एक साधारण हास्केल डेटाटाइप और एक समारोह को ओओ में बदलने की कोशिश कर रहा हूं। लेकिन मैं उलझन में हूँ ..हास्केल डेटाटाइप जावा (ओओ)
अंकगणितीय गणना के लिए निम्नलिखित हास्केल प्रकार है:
data Expr = Lit Int |
Add Expr Expr |
deriving Show
--Turn the expr to a nice string
showExpr :: Expr -> String
showExpr (Lit n) = show n
showExpr (Add e1 e2) = "(" ++ showExpr e1 ++ "+" ++ showExpr e2 ++ ")"
अब मैं कन्वर्ट करने के लिए कोशिश कर रहा हूँ ..
public interface Expr {
String showExpr(String n);
}
// Base case
public class Lit implements Expr {
String n;
public Lit(String n) {
this.n = n;
}
@Override
public String ShowExpr() {
return n;
}
}
public class Add implements Expr {
Expr a;
Expr b;
public Add(Expr aExpr, Expr bExpr) {
this.a = aExpr;
this.b = bExpr;
}
public String ShowExpr() {
return "(" + a.ShowExpr() + "+" + b.ShowExpr() + ")";
}
public static void main(String[] args) {
Lit firstLit = new Lit("2");
Lit secLit = new Lit("3");
Add add = new Add(firstLit,secLit);
System.out.println(add.ShowExpr());
}
}
इस का परिणाम देगा "(2 + 3) ", यह सही जवाब है।
लेकिन .. मुझे यकीन नहीं है .. क्या यह इसके बारे में सोचने और ओओ में मॉडल करने का सही तरीका है?
हास्केल डेटाटाइप का अच्छा प्रतिनिधित्व नहीं है?
मुझे लगता है कि आपका रूपांतरण वास्तविक अच्छा है। एकमात्र चीज जिसे मैं टिप्पणी कर सकता हूं कि एक्सप्रेशंस को इंटरफेस के बजाय एक अमूर्त कक्षा होना चाहिए। और इस तरह की समस्याओं के लिए जावा का उपयोग न करें क्योंकि इस पर हैकेल बहुत बेहतर है। – nist