나는 단순한 하스켈 데이터 타입과 함수를 OO로 변환하려고한다. 하지만 혼란 스러워요 ..자바 (OO)에 하스켈 데이터 타입
산술 계산을위한 다음 하스켈 타입 유무 : 이제
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 ++ ")"
I 변환하려고 해요 ..
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에서 모델링하는 것이 올바른 방법일까요?
하스켈 데이터 유형을 잘 나타내지 않습니까?
귀하의 전환이 정말 좋다고 생각합니다. 유일한 문제는 Expr이 인터페이스 대신 추상 클래스 여야한다는 것입니다. 그리고 haskell이 훨씬 낫기 때문에 이런 종류의 문제에 자바를 사용하지 마십시오. – nist