タグ

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

  • 関連タグはありません

タグの絞り込みを解除

ProgrammingとfunctionalとY combinatorに関するTaKUMAのブックマーク (6)

  • Y Combinator - LoveRubyNet

    $Id: ycombinator.html,v 1.6 2002/06/27 23:37:39 aamine Exp $ [ruby-list:35058] に刺激を受けて Y combinator を解読してみた。 こんなもん読むくらいなら以下の参考ページを読んだほうがいい。 参考にした (というかほとんどそのままな) ページ (英語) http://www.ececs.uc.edu/~franco/C511/html/Scheme/ycomb.html 動機 再帰関数は再帰するときに自分自身を名前で呼ぶのが普通である。 これをなんとかして名前を使わず、関数そのものを呼ぶように させたい。 求めかた まず単純な fact (階乗) を以下に示す。言語は Scheme である。 (define fact (lambda (n) (if (zero? n) 1 (* n (fact (- n

  • Haskell で Y コンビネータ - あどけない話

    Haskell では、Y コンビネータが作れないと誤解している人がいるので、できることを示すと同時に、これまで学んだことをまとめてみます。 遅延評価を活かした Y コンビネータ 関数名を用いた再帰を使ってよいなら、Haskell では遅延評価のおかげで、Y コンビネータを定義である Y x = x (Y x) の通りに書けます。 y :: (a -> a) -> a y x = x (y x) Y コンビネータ用の階乗を定義してみましょう。 fact :: Num a => (a -> a) -> a -> a fact = \f n -> if n == 0 then 1 else n * f (n-1) 以下のように動きます。 y fact 4 → 24 でも、この階乗は Haskell っぽくないので、入り口で分岐するように書き直してみます。 fact :: Num a => (a

    Haskell で Y コンビネータ - あどけない話
  • さあ、Yコンビネータ(不動点演算子)を使おう! - よくわかりません

    前回、おとうさんにもわかるYコンビネータ!(絵解き解説編) - よくわかりませんというエントリで、Yコンビネータ(不動点演算子)と再帰の絵解き解説をしました。 Yコンビネータ自身は、結局のところ再帰を産み出してくれるだけです。関数(正確にはλという単純な文字列変換ルール)だけで出来て、プログラミングに関するいろんな原理の研究を可能にするのが凄い訳です。その辺のさわりを、きしださんが解説されています。しかし、単なる再帰なら、実際のプログラミングではYコンビネータなんて使わなくても出来ます。 じゃあ、Yコンビネータとか不動点とかは、偉い学者さんとかが研究に使えばいいもので、普通のプログラマには何の意味もないモノなのでしょうか? というわけで、今回はポジティブに、Yコンビネータや不動点で出てくる考え方を、理論だけじゃなく、実際のプログラミングに応用する例を見てみましょう。 今回、プログラムの例を

  • Yコンビネータのまとめ - あどけない話

    不動点 関数 f :: a -> a に対して、f x == x となる x を「関数 f の不動点」という。 もし、関数 f を入力として取り、関数 f の不動点を返す関数 Y があるとすれば、関数 f の不動点を Y f と表現できる。 ここで、Y の型を調べる。引数 f の型は a -> a、Y は不動点を返すから返り値の型は a。よって、Y :: (a -> a) -> a となる。 不動点 x = Y f を f x == x に代入すると、Y f == f (Y f) となる。これを Haskell で実装すると、関数名に大文字が使えるとして、以下のようになる。 Y x = x (Y x) これを不動点コンビネータと呼ぶ。 再帰の例 再帰するときに自分の関数名を使わない階乗のプログラム fact を以下のように定義する。 fact :: Num a => (a -> a) ->

    Yコンビネータのまとめ - あどけない話
  • Y combinator の謎

    まとめ: Y combinator は、 不動点演算子 (不動点コンビネータ) と呼ばれるもののひとつである。 ある高階関数 f に Y を適用した値 Yf は、関数 f の不動点となる。 不動点演算子を使うと、名前のない関数でも自分自身を再帰的に呼び出すことができる: Y = (λf. (λx. f (x x)) (λx. f (x x))) Y の改良版 = (λf. (λx. (λp. f((x x), p))) (λx. (λp. f((x x), p)))) これ以外にも、不動点演算子として Turingコンビネータ θ が知られている: θ = (λx. (λy. y ((x x) y))) (λx. (λy. y ((x x) y))) (追記) λ-式 (lambda expression) は、さしずめ『関数のヒモノ (干物)』のようなものである。 水 (=引数) をかけ

  • More preview enhancements for Windows Azure AD Premium - Active Directory Blog - Site Home - TechNet Blogs

    Ever found yourself staring at the Output Window, overwhelmed by endless lines of logs and cryptic messages? You're not alone! For years, developers have relied on the Output Window for critical build and debug information. But making sense of it—and translating it into action—has...

    More preview enhancements for Windows Azure AD Premium - Active Directory Blog - Site Home - TechNet Blogs
  • 1