タグ

lambdaに関するVoQnのブックマーク (3)

  • 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 コンビネータ - あどけない話
  • Javaで ラムダ計算機を実装してみました。 - しがないプログラマ の日記

    ラムダ計算入門 この PDFを参考に、Javaでのラムダ計算を実装してみました。ついでに JavaCCを使って以下のような文を解釈できるようにしました。 (λx.x(y z)); λs.λz.s(s(sz));実際には、以下のようなコードで入力の解析と簡約化を行います。 import static ch.jpn.taoe.lambda.Parser.*; import ch.jpn.taoe.lambda.*; public class Sample { public static void main(String[] args) { Parser parser = new Parser(); String input = "((λx. x) (λx. x)) ((λx. x) (λx. x))"; Expression exp = parser.parse(new LambdaParse

    Javaで ラムダ計算機を実装してみました。 - しがないプログラマ の日記
  • Java でラムダ - IT戦記

    λ... λ... ちょっととおりますよ はじめに C++ Template の勉強をしていて、気がついた。 ネストした(内側から外側が見える)名前-値の空間が存在し 値から名前-値の空間を生成することが可能で その空間を生成するための情報を値として扱え 名前-値の空間の中の一つ以上の値を取り出せると ラムダが出来る。 という訳で Java でラムダを作ってみた import static java.lang.System.out; public class Hoge { public static void main (String args[]) { // チャーチ数 0 final λ zero = new λ () { λ call (final λ f) { return new λ () { λ call (final λ x) { return x; }}; }}; // チ

    Java でラムダ - IT戦記
  • 1