ラムダ式だとどう書くか忘れた・・・orz だれか教えてください。。。 class Program { static void Main(string[] args) { List<TestFind> listTestFind = new List<TestFind>(); // テストデータ入力 TestFind TestFindFirst = new TestFind(); TestFindFirst.Age = 35; TestFindFirst.Name = "日本"; listTestFind.Add(TestFindFirst); TestFind TestFindSecond = new TestFind(); TestFindSecond.Age = 25; TestFindSecond.Name = "アメリカ"; listTestFind.Add(TestFindSeco
ラムダ計算は, 多くのプログラミング言語, とくに関数型言語の原形になっています. ラムダ計算について理解しておくことは, 多くのプログラミング言語の習得に役立つでしょう. ラムダ計算はチューリング完全で, 計算能力としてはふつうのプログラミング言語と同じです. ラムダ計算で計算を書く訓練をしておくことは, 任意の計算を関数のみを使って(他の制御構文を用いずに)書くときに役立ちます. ふつうに書いたら煩雑な処理を, 関数型言語のやり方で書くとすっきりすることが多々あり, コードを自由自在に書くためには必須の考え方と言えるでしょう. 項 ラムダ計算の式を項(term)と言います. 項は変数, 抽象, 適用のいずれかです. 変数 変数(variable)はふつう1文字で書きます. 変数には関数内の束縛変数(bound variable)か自由変数(free variable)かという区別があり
以前書いた「ラムダ計算基礎文法最速マスター」(以下「最速マスター」)は, 予想以上に多くの人に興味を持ってもらえたようですが, 同時に難しくてわからなかったという人も多かったようです. 反響から察するに, 構文を見慣れていない(と錯覚してしまう)ことが理解の妨げになっていたように思います. ラムダ計算の構文は, 実際には全く特殊なものではありません. このことがよくわかるように, 「最速マスター」のラムダ計算の簡約の例をすべてJavaScriptの構文で書いてみました. ......という内容になるはずでしたが, 気がついたらラムダ計算のインタプリタをJavaScriptで実装していました! 実際に動かせるものは下記URLにあります. https://tarao.github.io/LambdaJS/#js 動作確認と既知の問題 Firefox 3.6GoogleChrome 4.1
►2022 (2) ► 10月 (1) ► 2月 (1) ► 2021 (51) ► 11月 (2) ► 10月 (2) ► 9月 (4) ► 8月 (4) ► 7月 (4) ► 6月 (4) ► 5月 (3) ► 4月 (10) ► 3月 (7) ► 2月 (4) ► 1月 (7) ► 2020 (155) ► 12月 (7) ► 11月 (10) ► 10月 (8) ► 9月 (8) ► 8月 (11) ► 7月 (21) ► 6月 (19) ► 5月 (14) ► 4月 (20) ► 3月 (13) ► 2月 (10) ► 1月 (14) ► 2019 (293) ► 12月 (11) ► 11月 (12) ► 10月 (24) ► 9月 (29) ► 8月 (27) ► 7月 (36) ► 6月 (40) ► 5月 (24) ► 4月 (35) ► 3月 (42) ► 2月 (6
に関して、練習します。 他の言語と比較してRubyのコードブロックの扱いは特徴的で扱い難そうに見えますが、使いこなせればコード量を減らせるし、その結果として可読性も増すので、慣れていきたいです。 def times_n(n)lambda { |x| x * n} # Kernel#lambdaの引数はブロック #lambda do |x| x * n end でもよい(複数行に渉るときなど)。 end times_ten = times_n(10) # nに10を代入 # 生成されたtimes_tenはProcインスタンス p times_ten.class #=> Proc # times_ten = { |x| x * n} はエラー。 # {}でのブロックはメソッドの引数としてのみ渡せる。 # また、ブロック引数はメソッドの最後の引数として定義する。 # ブロックの実行にはcal
参考サイト http://d.hatena.ne.jp/shunsuk/20090101/1230816826 http://eclipse.cspc.jp/perma/000080/ Proc.newとlambdaの違い returnの違い http://d.hatena.ne.jp/shunsuk/20090101/1230816826から引用 この違いは、処理とメソッドのコンセプトの違いにあります。Procはメソッドではなく、コードスニペットです。このため、Procのreturnは"proc_return"メソッドのreturnになります。lambdaはメソッドと同じように動作します。引数の数をチェックし、返り値を返します。lambdaは、匿名のメソッドを書くのと同じことなのです。 Proc.newだとコードスニペットだからreturnするとProcをcallしたメソッドから返ってき
新年おめでとうございます。2009年の最初のネタはプログラミングのネタにすることにしました。Rubyについてのステキなエントリーがあったので、紹介します。 no title 私は翻訳能力がないばかりか、リーディング能力も貧相です。ぜひ、原文を読んでみてください。 はじめにRubyのblock、Proc、lambdaはパワフルですが、解りにくい。Rubyはクロージャを使う方法が4つあって、それぞれチョットずつ違います。ここでは、そのへんを解説したいと思います。Block もっとも簡単で、かつRubyっぽいと言えば、Blockですね。 array = [1, 2, 3, 4] array.collect! do |n| n ** 2 end puts array.inspect # => [1, 4, 9, 16] 何が起こっているか? まず、block付きでArrayの"collect
最近JavaScript を書く機会が増えているが、それに従って自分のコーディングスタイルが少しづつだが変化してきているのが分かる。もともと「コードの読みやすさ」や「実行効率」にとことんこだわるタイプだが、(JavaやC++になくて)JavaScriptやRubyにあるクロージャや無名関数が私のコーディングスタイルにとてもマッチしているからだと思う。 簡単な例を紹介しよう。Pythonで書かれた config.py というモジュール。config.yamlという設定ファイルを読み込んで Dictionary として返す config.get() という関数。普通に実装すると、以下のような感じになる。 importyaml _config = None def get(): global _config if not _config: data = open('config.yaml')
テスト期間だし、なんか作っとかないとね。 ということで、最近話題のYコンビネータとかそこらへんの話に絡めて、ラムダ計算のインタプリタ作ってYコンビネータ動かそうぜ、っていう。前に書いたラムダ計算インタプリタは、データの形式を入力形式そのままで引き回していたので、割とカオスなことになったので、今回はパーサ、構文木、など適当に部品化してみた。 記法 λxyz. xz(yz) <==> '(λ (x y z) x z (y z)) Gaucheは全角文字がシンボルとして使えるのでスバラシイですね! β簡約 Pでラムダ式をパースして、BBでいけるところまでベータ簡約しつづける(発散する場合は打ち切る)、ppで表示、という流れ。gosh> (pp (BB (P '((λ (x y) x y z) a)))) λ y. a y z 適宜α変換もしてくれる (λxy. xy)y => (λ y. yy
λ η-変換 Web 上で,α-変換やβ-変換の解説は多いのですが,η-変換の解説がなかなか見つからなかったので,ここに情報を書いておけば誰かが喜ぶだろうかと.あ,ただし不正確な情報を含んでいるかもしれませんので,参考にするしないは自己責任ということでよろしくお願いします :-) η-変換(eta-conversion)は次の形式の変換. λx . M x => M, if x ¬∈ FV(M) つまり,変数 x が式 M の自由変数でなければ,式 λx . M x を M で置き換えてもいいよと,そういうことなのですが,これだけではどういう意味を持つのかなんのこっちゃです. で,何のためにη-変換を導入するかというと,それはある関数を等価な関数で置き換えるため.となると,何をして関数が等価であるかということになるのですが,ここで使われるのが 外延性 という概念.外延性による,外延的等価性
このページは、CombinatoryLogic Tutorialの翻訳です。 http://homepages.nyu.edu/~cb125/Lambda/ski.html 基本的に超訳です。 訳の正しさは全く保証されません。 訳のおかしい部分は多数あります。 翻訳元サイトの許可を取ったりはしていません。 無認可です。 訳者による前書きと感想コンビネータ論理チュートリアル 訳者による前書きと感想 訳してみたものの、ちょっと、たったこれだけの説明では、はじめてコンビネータ論理を知った人が読んで充分に理解できるとは思えない。 どうも、この文書は、原文の上位ディレクトリにあるLambda tutorialを読んだ後に読むべきものっぽいようだ。 しかし、流石にこっちまで訳す気力は無い。 そういう訳で、これだけを読むよりは、Unlambdaのチュートリアルを読んだ方がずっと、コンビネータ論理を理解
「JavaScriptで学ぶ・プログラマのためのラムダ計算」は、1回では述べ切らなくて、一段落付いたところで区切りました。これはかえって良かったですね、ブックマークやトラックバックでフィードバックが得られたので。 そのフィードバックなどをかんがみて、「残り=次回の話題」として予告した内容とは食い違ってしまうのだけど、今回は、文章では伝わりにくい(前回うまく伝わらなかったと思える)ラムダ計算の大事なツボを、なんとか表現してみようと思います。 [このエントリーの内容はだいぶ前にほぼ出来上がっていたのだけど、ココに書いてある事情で、“お絵描き”がなかなか出来なかったのです。] ※印刷のときはサイドバーが消えます。 内容: 知っていて損はない 計算は身体的に理解しよう ラムダ項のツリー表示:準備 ラムダ項のツリー表示:描く! β変換に対応するツリーの描き換え もっとβ変換をやってみよう 計算現象を
「JavaScriptによるテンプレート・モナド、すっげー簡単!」にて: 紙と鉛筆でラムダ計算を実行できることは必要だな、やっぱり。 なんて強調したので、ラムダ計算の入門、いってみよう。 [追記]練習問題集を追加しました。説明を読みながら、あるいは読んだ後で是非やってみてください。→「JavaScriptで学ぶ・プログラマのためのラムダ計算 問題集」[/追記] ※印刷のときはサイドバーが消えます。 内容:JavaScriptの関数リテラル ラムダ式ってなんだ ラムダ計算の体系と適用操作 ラムダ式の例をいくつか β変換 -- ラムダ計算のキモ! β変換を何度か実行してみる 中間まとめ、まだ続きがあるよJavaScriptの関数リテラル 最初に、JavaScriptに関する知識を確認しておきましょう。なお、JavaScriptの対話的実行環境については「もっともお手軽な対話的JavaScr
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く