タグ

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

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

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

    おとうさんにもわかるYコンビネータ!(絵解き解説編) - よくわかりません
  • スクリプト言語の比較

    スクリプト言語の比較 *1 *2 *3 *4 *5 *6 *7 コメント 行の継続 定数 未代入の変数へのアクセス 変数の展開 入出力 出力 フォーマット出力 出力先変更 標準入力 __END__ 演算 +1 整数/整数 負数の除算 文字列 真と偽 多重代入 多岐分岐 関数 関数 関数引き数 関数引数に対する副作用 関数のデフォルト引数の値の評価タイミング 関数のデフォルト引数にコンテナ型を使用した場合の振舞 関数戻り値 関数の再帰 関数の別名 関数定義内関数定義 関数の引数の順番 関数にファイルハンドルを渡す オブジェクト指向 クラスの定義 インスタンスメソッドの定義 メソッドのクラス内での利用 インスタンスメソッドの可視性 インスタンスメソッドの追加 インスタンス変数 インスタンス変数の可視性 インスタンス変数の追加 クラス変数 クラスの継承 多重継承 スーパクラスのメソッド呼び出し

  • 檜山正幸のキマイラ飼育記 (はてなBlog)

    2024-12-20 関手のデカルト射とファイバー付き圏 雑記/備忘 ファイバー付き圏〈{fibred | fibered} category〉は、圏論で重要な概念です。ファイバー付き圏の実体は(圏ではなくて)関手です。とある性質を持つ持別な関手がファイバー付き圏です。「とある性質」を記述するためには、関手に伴うデカルト射という概念を… 2024-12-18 クラン、ファイブレーション、スパン 雑記/備忘 クラン〈clan〉は、ジョイアル〈Andre Joyal〉によって導入された圏論的構造〈構造付きの圏〉です。ジョイアルは、型理論の理論〈theory of type theories〉の基礎としてクランを定義したようです。クランとその双対であるコクランは型理論や計算科学で有用… 2024-12-16 レンズ/プロ関手とWeb処理アーキテクチャ 雑記/備忘 レンズを説明するための事例として

    檜山正幸のキマイラ飼育記 (はてなBlog)
  • 最速インターフェース研究会 :: 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