SICP : Ex1.35 : Java
[id:lethevert:20060108:p4]
不動点を求める問題
abstract class FixedPoint<R> { abstract R f(R x); abstract boolean closeEnough(R a, R b); R solve(R guess) { R next = f(guess); while (!closeEnough(next, guess)) { guess = next; next = f(guess); } return next; } } public class Main { public static void main(String[] args) { FixedPoint<Double> fix = new FixedPoint<Double>() { Double f(Double x) { return 1.0 + 1.0 / x;} boolean closeEnough(Double a, Double b) { return tolerance > (a>b?a-b:b-a); } final double tolerance = 0.0000000001; }; System.out.println(fix.solve(1.0)); } }
これは非常に「らしい」コードになりました。クラスにまとめたことによってモジュール化されて分かりやすくなっているように思います。