タグ

functionalに関するmotemenのブックマーク (15)

  • Functional code != Good code | David R. MacIver

    There’s a dangerous trap to fall into: The belief that functional code is automatically good code. Hopefully not too many people would come out and actually claim this, but it seems to be an unstated common belief. It’s also utter bollocks. Functional programming gives you tools for writing good code. Good functional code can be very good (good imperative code can be very good too! But that’s not

    motemen
    motemen 2008/08/18
    fold はわかりづらいことが多いなー。破壊的なニュアンスで書きたいことが多い
  • 純粋関数型言語で定義できない純粋な関数 - sumiiのブログ

    並列論理和の続きで真のエキスパート氏から教えていただいた話(の劣化コピー)。並列論理和は、逐次言語では定義できないけど「計算可能」な(並列言語では定義でき、領域理論でも連続になる)関数でしたが、その親戚というか兄弟です。 MLで(実はHaskellでも良いのですが)、unit→unit型の純粋な(=副作用のない)関数は、 let f1 () = () let rec f2 () = f2 () の2つがあります。ただし、たとえ内部の実装が異なっても、外部から観察できる振る舞いが同じ関数は同じとみなします。たとえば let f1' () = try (raise E) with E -> () なるf1'はf1と同じ(かつ純粋)とみなします。 以下、「関数」としてデフォルトでは「振る舞いが純粋な関数」だけを考えることにします。すると、上と同様に、(unit→unit)→unit型の関数は l

    純粋関数型言語で定義できない純粋な関数 - sumiiのブログ
  • 関数合成の野望ついえたり: Days on the Moon

    いちいち function 、return と書くのは面倒くさいという理由で関数合成・引数束縛に手を染めたわけだけど、「nazonoDiary - DHTMLで子を探す、親を捜す」にてそれでは対応できないパターンを発見。それが以下のパターン (改行はこちらで挿入)。 searchParentByTagName = function(e,tagName){ return searchParent(e,function(n){return tagNameEqual(n,tagName)}); } 内側の function expression を置き換えることはできるんだけど……、 searchParentByTagName = function (e, tagName) { return searchParent(e, tagNameEquals.bind(_1, tagName)); };

  • 関数的っポイ!? JavaScript: Days on the Moon

    関数型プログラミング言語を触ったことがないのでこれが関数的かどうかは知らないが、いちいち function とか return とか書くのは面倒くさいと思ったのと「関数の変形」や beyond.js 、boost::bind に影響を受けて、関数の変形を行うライブラリを作った。 まずは引数の束縛、及び入れ替え。「関数の変形」及び boost::bind にならって後々入力される引数を _n であらわすことにする。 function concat(a, b) { return "" + a + b; } concat.bind(_1, "a")("b"); // "ba" concat.bind("a", _1)("b"); // "ab" concat.bind(_2, _1)("a", "b"); // "ba" concat.bind(_1, _1)("a"); // "aa" 次に関

  • 関数型言語マニアのための論文紹介5:あなたのスクリプトは「常に」正しいHTMLを生成しますか? - sumiiのブログ

    Static Approximation of Dynamically Generated Web Pages. Yasuhiko Minamide. WWW 2005. http://www.score.cs.tsukuba.ac.jp/~minamide/www05.pdf 実装はこちら↓(おそらく研究目的のプロトタイプですが、用途によっては実用にもなるかも?)。勝手に紹介してすみません。>Mさん http://www.score.is.tsukuba.ac.jp/~minamide/phpsa/ PerlなりPHPなりで、HTMLを生成するスクリプトを書いていて、「タグが閉じてないー」とか「入れ子が合わないー」とか困らないでしょうか(クロスサイトスクリプティングは言うに及ばず)。特に、そういうバグが特殊な条件でしか起こらないときは、テストで発見するのも無理だったりします。 そこで、ス

    関数型言語マニアのための論文紹介5:あなたのスクリプトは「常に」正しいHTMLを生成しますか? - sumiiのブログ
  • 関数型言語マニアのための論文紹介2:Packrat Parsing - sumiiのブログ

    Packrat Parsing: Simple, Powerful, Lazy, Linear Time. Bryan Ford. ICFP 2002. http://pdos.csail.mit.edu/~baford/packrat/icfp02/ 「設定ファイルや専用言語のparserをYACCで書こうと思ったけど、conflictだらけになってわけがわからない」という経験はないでしょうか。それはLALR(1)という構文解析アルゴリズムがややこしいからいけないのです。packrat parsingは、すごく単純で効率のよい構文解析アルゴリズムです。大ざっぱに言うと「再帰+バックトラッキング+dynamic programming」だけ。YACCみたいな自動生成器もあるようですが、関数型言語なら手書きしてもno problemなぐらい楽みたいです。(Y研の卒論でC++パーザを手書きした

    関数型言語マニアのための論文紹介2:Packrat Parsing - sumiiのブログ
  • 関数型言語マニアのための論文紹介1:Excelは関数型言語 - sumiiのブログ

    Improving the world's most popular functional language: user-defined functions in Excel. Simon Peyton Jones, Margaret Burnett, and Alan Blackwell. ICFP 2003. http://research.microsoft.com/~simonpj/Papers/excel/index.htm 要約すると「Excelは関数型言語」ということです(わりと当)。私を含め、ICFP 2003(関数型言語に関する国際会議)のプログラム委員たちを爆笑困惑させました(やや当)。 こんな感じで「ポインタ+一言」で論文紹介(というほどでもないですが)を続けてみようかと。英語が苦手でなければ130分ぐらいで斜め読みできると思いますが、別に「読め」というつもりで

    関数型言語マニアのための論文紹介1:Excelは関数型言語 - sumiiのブログ
  • 思いて学ばざれば則ち殆うし - sumiiのブログ

    あるところに同じようなことを(ほとんど成り行きで)書いたのですが、重要な問題のような気がしてきたので、こっちにも書いてみる。 一般に、関数型言語やプログラミング言語(および計算機科学、ないし任意の専門)についての情報は、 一般書・一般誌、Webやメーリングリストやブログ 教科書・専門書 論文 口頭での議論(学会発表や質疑応答、グループのミーティング、部屋での会話) などで交換されます。 で、一般に情報の「ディープさ」は上から下へ行くほど濃くなると思うのです(少なくとも僕の専門分野ではそう)。そのごく一部である1.だけ(しかも日語onlyで)「勉強」していろいろと議論するのは、(何もしないよりは良いのかもしれませんが)非常に危険です。その危険をちゃんと意識していればno problemですが。「高速道路」の話と同じことかも。 たとえば、日のネット(?)では今になって妙に持ち上げられている

    思いて学ばざれば則ち殆うし - sumiiのブログ
  • 人力検索 - 関数型言語(プログラミング言語Scheme, Haskellなど)を勉強しようと思っています。 関数型言語の勉強方法

    関数型言語(プログラミング言語Scheme, Haskellなど)を勉強しようと思っています。 初心者にも関数型言語のメリットや考えかたがスラスラ分かる勉強の材料を教えてください。 言語の習得よりも、関数型言語の考え方の習得に重きを置いています。 例えば - このを読め - このサイトを読め のように、入門から実用レベルまできちんと筋の通ったものをお願いします。 ちなみに 以前Schemeを勉強しましたが末尾再起辺りでなんとなくうやむやになってしまいました。 あと「計算機プログラムの構造と解釈」は僕には難しすぎでした。

  • Pattern Languages of Functional Programs

    These pages are for people interested in applying the ideas of patterns and pattern languages to the doing, understanding, and teaching of functional programming. This is just the beginning of what some hope will be a productive area of study. The web pages here are in a beta-release state. Why Patterns? Pattern languages describe how to build things. As such, patterns can be a good tool for helpi

  • 関数、オブジェクト、クロージャ - FAX

    (thanks to id:koyachi、del.icio.us/rtk2106) OOPとFPと。関数、オブジェクト、クロージャの使い分けについて考えます。 関数型が良いのか、オブジェクト指向が良いのか、知りたいと思っていました。色々なページを読み、現時点で一応の答えを得ました。 カウンタを例にして、関数、スコープ、オブジェクト、クロージャの順に見て行きます。関数関数は処理です。入力と出力があります。関数型プログラミングでは、関数同士の入力と出力を連結しプログラムが構成されます。 var current = 0; function next(v){ return v + 1 } function previous(v){ return v - 1 } ok( 1 == ( current = next(current) ) ); ok( 2 == ( current = next(cu

  • MochiKit

    Bubblegum Dungeon – the long-awaited series of BDSM in fantasy world full of colors and rainbows. We finally leave the deep dark dungeons and bring the genre to the mainstream. Dealing with demanding clients isn’t always easy but these female realtors found their way to please and the most importantly to SEAL THE DEAL. Girls Only Porn – it’s time to discover the women’s perspective on fun times. W

    MochiKit
    motemen
    motemen 2008/07/03
    すげーze(おっそ
  • 最速インターフェース研究会 :: Haskell風にJavaScriptを書く

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

    motemen
    motemen 2008/07/03
    これすごいよ!
  • Y Combinator

    In this file we derive the Y combinator, one of the fundamental results of recursive procedure theory. You already know that in some cases it is not necessary to give a procedure a name. For example, ((lambda (x) (+ x 1)) 6) adds 1 to 6 without naming the procedure that does it. But, what about a recursive procedure? For example, (define fact (lambda (n) (if (zero? n) 1 (* n (fact (- n 1)))))) whi

  • 1