タグ

ブックマーク / guccyon-2.hatenadiary.org (5)

  • JavaScriptでポイントフリースタイル - guccyonikki

    積ん読してあった「ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門」を読んだんだけど、 その中にポイントフリースタイルというのが書いてあったので、 同じような事がJavaScriptでもできないか試してみる。 書によると、ポイントフリースタイルっていうのは関数で関数を 定義しながらプログラミングをするコーディングスタイルの事だそうだ。 要は関数合成や引数の部分適用などにより高階関数を返すような関数を定義し、 それを呼び合いながらプログラムを書こうってこと。 JavaScriptは高階関数を扱えるので近い事はできそうだ。 引数の部分適用 まずは関数が引数の部分適用をできるようにする。つまりカリー化。 よくある、curry関数に関数と引数を渡す事で部分適用された関数を返すという方法だと 再度、部分適用する時に何度もcurry関数を呼び出す必要がある。 こんな風に

  • JavaScriptでデカルト積 - guccyonikki

    JavaScriptでリスト内包表記のような事をやってみたい。 その為にまずデカルト積をとる為の処理を作成してみる。 デカルト積って? デカルト積とは直積とも呼ばれ英語ではproduct Cartesian product というようだ。 例えば[1,2,3]という集合と [4,5,6] という集合があると、 これらのデカルト積は [1,4],[1,5],[1,6],[2,4],[2,5],[2,6],[3,4],[3,5],[3,6] となる。要するに全ての組み合わせという事。 パッと見た感じ単純に2次元配列にして、ループをネストにするだけで良さそうだが、せっかくなので関数指向的に書いてみたい。 まず2次元目の配列 [4,5,6] に何らかの処理を適用する事で、 [4,5,6] -> [ [1,4],[1,5],[1,6] ] と変化する処理が必要。 何らかの処理とは固定された1とそれぞ

    JavaScriptでデカルト積 - guccyonikki
  • JavaScriptでリスト内包表記を作ってみた - guccyonikki

    追記 ※仕様を変更しました。 JavaScriptで内包表記、Newバージョン haskellやErlangにあるようなリスト内包表記を理解する為にも、 また便利っぽいのでJavaScriptでも使えるよう実装してみる事にした。 実装前に検索をかけてみると既にそういう事やってる人はいるみたいだ。 JavaScriptでリストの内包表記(の真似) | 東京嫉妬 まぁ理解する為には実装してみるのが一番って事で、車輪の再発明なんて気にしない。 それに既に途中までやってるしね。ではいってみよー。 インターフェースをどうする? まず内包表記の分解から。 [x | x <- [1,2,3,4,5,6], x < 4] こんな感じの記法で、[1,2,3]というリストと等価になる。 この書き方は元々、数学の集合の定義を表現する記法に由来しているらしく、 x <- [1,2,3,4,5,6]ってのは数学の場

    JavaScriptでリスト内包表記を作ってみた - guccyonikki
  • JavaScriptで内包表記、Newバージョン - guccyonikki

    昨日作ったJavascriptの内包表記のインターフェースを一新しました。 listC関数の引数に要素を渡すスタイルをやめて、配列の要素に式を直接書くスタイルに変更。 (内包表記的にみて)より見た目が直観的になったと思います。 まぁそれでも言語仕様の制限上、最終的に関数コールしないといけませんが。 記述例 ["x + y|x <- [1,3,5], y <- [2,4,6], x > y"].lisc(); // [5,7,9] 書き方は結構柔軟で、文字列のみでバーチカルラインを使って式とリストを分ける標準スタイル以外にも、配列の要素としてそれぞれの式を与える事もできます。 ["[x,y]","x <- [1,3,5,7]", "y <- [1,2,3,4]", "(x + y) % 2== 0"].lisc(); // [[1,1], [1,3], [3,1], [3,3], [5,1]

    JavaScriptで内包表記、Newバージョン - guccyonikki
  • JavaScriptでコマンドフィルタっぽい事をやってみた - guccyonikki

    パイプで繋ぐUnix系のコマンドラインフィルタや、 smartyのフィルタのように次々にコマンドの戻り値を 次のコマンド(関数)に渡していくような制御を javascript でやってみる。 インターフェース(コマンドの指定方法について) 見た目の直感性が大事なので文字列を使いパイプで繋ぐコマンドを 指定する事も考えたが、今回は関数呼び出しを繰り返し、 引数にコマンドを渡すように実装。 こんな感じ。 commandFilter("テスト文字列")(escape)(nl2br)(url2link)(); 実装 function commandFilter() { var arg = Array.prototype.slice.call(arguments, 0); var chains = []; return function wrap(){ if (arguments.length ==

    JavaScriptでコマンドフィルタっぽい事をやってみた - guccyonikki
  • 1