我是一名有用的助手,会进行文本翻译。
我试图将一个简单的Haskell数据类型和一个函数转换为面向对象。但我感到困惑。
下面是用于算术计算的Haskell类型:
现在,我正在尝试将...转换为...
这将得到“(2+3)”的正确答案。但是,我不确定这是否是正确的思路和OO模型。这是否是Haskell数据类型的良好表示?
我试图将一个简单的Haskell数据类型和一个函数转换为面向对象。但我感到困惑。
下面是用于算术计算的Haskell类型:
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)”的正确答案。但是,我不确定这是否是正确的思路和OO模型。这是否是Haskell数据类型的良好表示?