Keep on moving

あんまりまとまってないことを書きますよ

Church数の実装(using Erlang)

Erlangの勉強も兼ねてChurch数を書いてみた。とはいえ、これでいいのかな?
ついでに見よう見まねでEunitも使ってみました。まだまだ勉強しなくちゃいけないことはたくさんありますな。

-module(church).
-author('Ehren').
-include("eunit.hrl").
-export([display/1,add_1/1,add/2]).

display_test_() ->
    Zero = fun(_) -> (fun(X) -> X end) end,
    One = add_1(Zero),
    Two = add_1(One),
    Three = add(One,Two),
    [
      ?_assert(print(Zero) == 0),
      ?_assert(print(Three) == 3)
    ].

print(F) ->
    Inc = fun(X) -> X + 1 end,
    (F(Inc))(0).

add(A,B) ->
    fun(F) ->
	    fun(X) ->
		    (A(F))((B(F))(X))
	    end
    end.

add_1(N) ->
    fun(F) ->
	    fun(X) ->
		    F((N(F))(X))
	    end
    end.

追記

id:clairvyErlangでChurch数書いてますね。
こちらの方がソースもきれいですね!さすがだなー。
http://d.hatena.ne.jp/clairvy/20090409/1239285851