タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

javascriptとhaskellとfunctionalに関するjjzakのブックマーク (4)

  • おとうさんにもわかるYコンビネータ!(絵解き解説編) - よくわかりません

    先日YコンビネータのきしださんのYコンビネータのエントリが話題になっていました。 ずいぶん日にちが経ってしまいましたが、自分も、自分なりにYコンビネータのあたりを絵解きで整理してみたいと思います。きしださんのエントリタイトル*1に引っ掛けて、目標として、自分の父親(非プログラマ。その辺のおっさん)でも解る内容を目指します。 なぜ不動点演算子というのか、不動点だったらなぜ再帰なのか、この辺りも含めて、実感を持って納得できればいいなと思います。 きしださんのエントリのおさらい 題の前に、きしださんのエントリをおさらいしておきます。 Yコンビネータはただのオモチャじゃないんだよ 関数だけで色んな事が出来る 条件分岐をする関数ってのもある。 再帰(ループ)を作れる関数もある。←これがYコンビネータ。 数値も関数で表現できる。 つまり、関数だけで、条件分岐も、再帰(ループ)も、数値も作れちゃう!!

    おとうさんにもわかるYコンビネータ!(絵解き解説編) - よくわかりません
  • 最速インターフェース研究会 :: Haskell風にJavaScriptを書く

    ていうのをだいぶ前に作ったんだけど、コードがごちゃごちゃで何やってるか自分でもよくわかってなかったのでちょっと整理して公開。フィボナッチ数列を求めるのに大変便利です。 http://la.ma.la/misc/js/haskell/ 関数の定義を記述すると、再帰処理でごにょごにょやって求めてくれる関数を生成します。メモ化もします。色々いじってたらなんとなく出来た。あんまり細かいツッコミされても困る。 実際のところJavaScriptは再帰処理をたくさんさせるとすぐにスタックオーバーフローで止まってしまうので使い物になりません。数を大きくすると即死したりするので注意が必要です。タイマーを使って再帰処理させるとかトリッキーなことをすれば回避することもできるのだけれど面倒くさい。 遅延評価っぽくなっていて、 // 代入はできる test = ack(100,100); // アッカーマン関数(1

  • d.y.d. 再帰関数の意味とは不動点である!

    02:12 05/09/03 反応リンク集 fixの話 … Perl版、 Perl版、 C++版、 C++版、 Scheme版、 Concurrent Clean版。 (9/4追記: Ruby版、 Erlang版、 Squeak版、 D版。 Sukuna版。 Erlangのprocessを使ったメモ化の例は見てみたいかも。)。 で、 メモ化の話 … Python版、 Python版 (9/4追記: ET版、 Erlang版、 Java版、 PostScript版。 )。 decoratorは流石かっこいいですね。C++版は…うーん、個人的には、このくらいなら Boost に頼らないで直球ストレートで書いてあげたいところです。 彼はやればできる子なんです。 template<int (*G)(int(*)(int),int)> int fix(int x) { return G( fix<G

  • like a haskell - web λ.0 javascript

    fib = FunctionMaker(n); fib(0).eq(1); fib(1).eq(1); fib(n).eq("fib(n-2)+fib(n-1)"); p(fib(10)); // dump memoized value p(fib.memo.toJSON()) fact = FunctionMaker(n); fact(0).eq(1); fact(n).eq("fact(n-1) * n"); p(fact(10)); // dump memoized value p(fact.memo.toJSON()) ack = FunctionMaker(m,n); ack(0,n).eq("n+1"); ack(m,0).eq("ack(m-1,1)"); ack(m,n).eq("ack(m-1,ack(m,n-1))"); p (ack(2,2)); // dump me

  • 1