タグ

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

タグの絞り込みを解除

functionalに関するnagachikaのブックマーク (4)

  • ラムダ計算で代数的データ型を表現する方法 - @syamino はてなダイアリー

    ラムダ計算でEither Either型の値をパターンマッチする状況を考えます。 「データコンストラクタのパターンマッチ」は,下図のようにしてラムダ計算で表現できます。 ラムダ計算でBool 今度は,Bool型の値をパターンマッチする状況を考えます。 TrueやFalseには引数が無いので,(3)や(4)はλで囲みません。 パターンマッチ = 「データコンストラクタを他の関数に置き換えること」 パターンマッチによって,Leftがlに置き換わります。以下同様です。 「データコンストラクタを置き換える」という概念について,もう少し詳しく考えていきます。 データコンストラクタの置き換え方は2種類ある リストのような再帰的なデータ型では,データコンストラクタの置き換え方が2種類あります。 data List a = Cons a (List a) | Nil (1) 全てのデータコンストラクタを置

    ラムダ計算で代数的データ型を表現する方法 - @syamino はてなダイアリー
  • 究極の関数型言語による至高のHello, world! - Life Goes On

    以下の記事は、 R 教授による S 大学での講義録を Haskell Advent Calendar 2012 のために転載したものである。 はじめに えー、それでは、今年最後の授業を始めたいと思う。今日は『究極の関数型言語による至高の Hello, world!』について講義することにしたい。 “究極”の関数型言語が何であるかについては諸説あろうが、ここでは SKI コンビネータ計算を指すものとする。また“至高”の定義を、最も簡潔であること、すなわち最も短く記述されていることと定める。 諸君は第一プログラミング言語として Haskell を選択している者がほとんどであろう。当初この講義も Haskell をベースに行おうと考えていた。だが、Haskell は非常に巨大な言語となってしまっており、言語仕様を把握するだけでも難しい。だいたい STG が Spineless Tagless G

    究極の関数型言語による至高のHello, world! - Life Goes On
  • Lazy K 入門 - Life Goes On

    何となく触ってみました。以下に体験記を。 Lazy K の入力はチャーチ数のリストとして与えられます。出力もチャーチ数のリストとして構成。Haskell の interact が最初から備わっているような感じ。 なので、入力をそのまま出力する echo サーバは以下のように書けます。 I"K〜"とすれば、入力を無視して"〜"を出力します。 Hello, world! は大変そうなので、まずは一文字出力に挑戦。作るのが簡単そうな"@"(0x40)を選びました。 最初に書いたコードはこんな感じ。 K (S(KS)K (S(S(K(S(KS)K))S)(KK)I (K(SII(SII(S(S(KS)K)I))))) (S(S(K(S(KS)K))S)(KK)I (S(S(KS)K)(S(S(KS)K)I)(S(S(KS)K)I(S(S(KS)K)I)))))簡単に解説すると、K (cons 64

    Lazy K 入門 - Life Goes On
  • Lazy K についての個人的なまとめ - 週1でも日記

    Lazy K は関数だけでできている どの関数も関数 1 個を引数にとって、関数 1 個を返す関数 関数 x を y を引数にして呼ぶのを xy と書く unlambda 記法だと `xy xy して得られた関数を z を引数にして呼ぶのは (xy)z だが、演算の優先順位的に括弧は省略できるので、xyz と書ける 関数 z を、xy して得られた関数を引数にして呼ぶのは z(xy) unlambda 記法だと、それぞれ ``xyz、`z`xy 関数は S と K と I がある Sxyz -> xz(yz) Sxy は引数 z を与えると xz(yz) を返す関数 Sx は引数 y を与えると「引数 z を与えると xz(yz)を返す関数」を返す関数 S は引数 x を与えると「引数 y を与えると「引数 z を与えると xz(yz)を返す関数」を返す関数」を返す関数 Kxy -> x

    Lazy K についての個人的なまとめ - 週1でも日記
  • 1