Java 函数式编程实验(新添Keyword Message)

阅读更多
实验了以下内容:高阶函数,Currying,Lazy Evaluation,无穷流,Monad。都是很基本的东西。实现也是基于内部类的。没啥是了不起的。只是在给Lazy Evaluation造语法糖的时候,用了一下bytecode动态增强。给Lazy函数的lambda定义内部的所有的局部变量的读取操作前加了Lazy Evaluation过程。

private final static F TRUE = $(true);
private final static F ONE = $(1);
private final static F TWO = $(2);
private final static F THREE = $(3);

private void demo() {
	LF2 add = new LF2() {
		protected Integer lambda(Integer left, Integer right) {
			System.out.println("calc " + left + " + " + right);
			return left + right;
		}
	};
	LF3 select = new LF3() {
		protected Integer lambda(Boolean arg1, Integer arg2, Integer arg3) {
			if (arg1) {
				return arg2;
			}
			return arg3;
		}
	};
	LF1 onePlus = add._(ONE);
	F onePlusTwo = onePlus._(TWO);
	F onePlusThree = onePlus._(THREE);
	System.out.println(select._(TRUE, onePlusThree, onePlusTwo)._());
}


运行结果

引用

calc 1 + 3

4


结果分析:
1、实现了Curry(利用匿名类,绑定参数)
2、实现了Lazy Evaluation(利用载入时字节码修改,会添加进参数是否已经被求值的判断)
3、类型安全

缺点:
匿名类的语法
调用语法(用_表示调用仍然会有很多括号)

12.9:
更新为最新的语法
  • reborn-functional.zip (25.6 KB)
  • 描述: 所有源代码
  • 下载次数: 38

你可能感兴趣的:(编程,Java,F#,Haskell,REST)