2012-01-01から1年間の記事一覧

clang3.2(trunk) on MinGW(MSYS) with GCC 4.7.0

clangのコンパイル方法は日本語でもあちこちにあるので省略。 現時点のsvn trunkからcheak outしたソースを使用した場合、 MinGWでGCC4.7.0を使っていると色々と問題が出るのでその修正方法を書きます。1.Include Pathの解決(既に知っている人が多いと思い…

Rubyでflip

関数合成できた。ポイントフリーができた。カリー化もある。 なら次はflipで部分適応の順序を入れかえてやりたい。 まずは下記のProc#flipを見て試す。 http://yuroyoro.hatenablog.com/entry/2012/08/10/232443 div = lambda{|x,y| x.to_f / y } div.(10,2)…

Rubyでポイントフリー続きの補足

def g ->x, y { x * y }.curry end def f ->y { y * 4 } end def foo(x, y) f.(g.(x).(y)) end あんなわけのわからんことしなくてもこれでいけた。 def foo # f.(g.(x).(y)) # (f << g.(x)).(y) # (f.method(:<<) << g).(x).(y) (f.method(:<<) << g) # hask…

Rubyでポイントフリー続き

さっきとは少し変わってgとf関数はλにしてます。 def g ->x, y { x * y }.curry end def f ->y { y * 4 } end def foo(x, y) f.(g.(x).(y)) end さて、このfoo(x,y)からxとyを取り除きます。 結果… def foo ((f.<<).<<.(g)) # f(g(x,y)) end foo.(2).(2) #=>…

Rubyでポイントフリー

まずは普通に関数定義するとこんなんですよね? def g(x) end def f(y) end def foo(x) f(g(x)) end foo関数をポイントフリーにしてみます。 まずは、関数合成 def foo(x) (method(:f) << method(:g).(x) #もしくは ->x { f (g x) } end 合成したので(method…

RubyでMaybeモナド

まずは、データとlookup関数を定義 db = {:alice => {:title => "Ms.", :job => "sales"}, :bob => {:title => "Mr.", :job => "engineer"}} def lookup(key) ->data { data.key?(key) ? Just.return(data[key]) : Nothing } end lookupのテスト p return!(d…

しばらく休養

休養中に勉強がてらRubyを触ってます。 でもなぜか調べて行くうちにHaskellについて調べてます。(モナドとか関数合成とかカリー化とか…。) やっぱりHaskellやれってことか?Rubyに関数合成がないとか知った時は残念すぎて断念しそうでしたが 自前で実装すれ…