Philip Wadler的论文"用于函数式编程的Monads"有一个函数eval的例子,它执行用Haskell编写的除法.
在Graham Hutton的"Haskell编程"中对它进行了改编:
data Expr = Val Int | Div Expr Expr
eval :: Expr -> Int
eval (Val n) = n
eval (Div x y) = eval x `div` eval y
Run Code Online (Sandbox Code Playgroud)
我的Java相当于:
abstract class IntegerExpression {
abstract Integer evaluate();
}
class Value extends IntegerExpression {
Integer value;
public Value(Integer x) {
value = x;
}
public Integer evaluate() {
return value;
}
}
class DivisionExpression extends IntegerExpression {
IntegerExpression x, y;
public DivisionExpression(IntegerExpression a, IntegerExpression b) {
x …Run Code Online (Sandbox Code Playgroud)