Sto provando a convertire un semplice tipo di dati Haskell e una funzione in OO. Ma io sono confuso ..Tipo di dati Haskell su Java (OO)
Avere il seguente tipo di Haskell per il calcolo aritmetico:
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 ++ ")"
Ora sto cercando di convertire ..
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());
}
}
Questo si tradurrà in "(2 + 3) ", è la risposta corretta.
Ma .. Io non sono sicuro .. è questo il modo giusto per pensarci e modellarla in OO?
is't una buona rappresentazione del tipo di dati Haskell?
Penso che la tua conversione sia davvero buona. L'unica cosa che posso dire è che Expr dovrebbe essere una classe astratta invece di un'interfaccia. E non usare java per questo tipo di problemi perché haskell è molto più bravo in questo. – nist