2006-01-29から1日間の記事一覧

SICP : Ex1.44 : Java

[id:lethevert:20060126:p1] 関数を平準化するSmooth関数を作る問題。 Javaでカリー化を前提とした高階関数が書けるということを確認するという問題でもある。 [id:lethevert:20060127:p3]で作ったIterクラスを総称化したクラスに対して、Smoothクラスを適用…

SICP : Ex1.38 : Java

[id:lethevert:20060124:p6] オイラー展開で自然対数の底 e を求める問題。 abstract class ContFrac<A> { abstract A zero(); abstract A n(int k); abstract A d(int k); abstract A add(A a, A b); abstract A div(A a, A b); A solve(int n) { A ret = zero</a>…

SICP : Ex2.06 : Java

[id:lethevert:20060113:p1] チャーチ数を表現する問題。 クラスという余計な装飾がついたせいで、意味的には分かりにくくなってしまったかも。動作やできることはScheme版やConcurrent Clean版と同じ。 手続きを抽象化して、抽象化した手続きに対する手続き…

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); }</r>…

SICP : Ex1.04 : Java

[id:lethevert:20051219:p1] 手続きを条件で切り替えるという問題 public class Main { public static void main(String[] args) { System.out.println(plus_abs(2,3)); System.out.println(plus_abs(2,-3)); } public static int plus_abs(int x, int y) { …

だから関数型言語って何さ!!!

[id:lethevert:20060105:p3] では、「手続きの抽象化」ができるのが関数型言語だという結論を出したのですが、Javaでも十分に手続きの抽象化をすることはできたわけで、じゃあ何なんだ!という疑問が復活したのですが・・・ 関数型言語 ラムダ計算を先祖に仰…

Javaでは無理なこと

カリー化かなぁ。 コードを書いてやれば、カリー化を作ることはできるのですが、HaskellやCleanのように自動的なカリー化はないので、カリー化を前提とした高階関数は難しいかな。 いや、そうでもないかも。SICP Ex1.44で考察します。 (続く) - 追記)なん…