タグ

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

  • 関連タグはありません

タグの絞り込みを解除

lambdaとimportedに関するmuddydixonのブックマーク (9)

  • プログラマは○学生

  • 不動点オペレータについて

    不動点オペレータY 階乗関数は、 (define fact (lambda (n) (if (= n 0) 1 (* n (fact (- n 1)))))) のように、再帰的に定義できる。 再帰的定義を行なう場合はdefineやletrecを使うけど、 代わりにletを使うと再帰的定義はできない。 defineやletrecをどうしても使いたくないなら、多少工夫がいる。 例えば、factの引数を増やすという方法がある。 (let ((fact (lambda (self n) (if (= n 0) 1 (* n (self self (- n 1))))))) (fact fact 10)) ⇒ 3628800 (中略) 不動点オペレータYを使うと次のように書ける。 (let* ((Y (lambda (g) ((lambda (s) (g (lambda (x) ((s s) x))

  • 不動点演算子 - 純粋関数型雑記帳

    昨日日記の日付を間違ってしまって8月11日が欠番になってしまった。 が、まぁ、いいか。めんどくさいし。 今日やった量子計算の勉強会の発表で力を使い果たした…かも。 ねたに困ったときはライトな?話題でも。いつもどおりだらだらと。 λ計算にて再帰的な関数の意味づけに不動点演算子というものを用いる。 不動点演算子(Y)は、λ式Mに対して Y M = M (Y M) を満たすようなλ式で、 具体的には Y = λf.(λx.f(x x)) (λx.f(x x)) と定義される(これは一例。定義は他にも考えられる)。 数学的には(Y M)がMの不動点になっているので、 Yを不動点演算子というのだが、 Y M => M (Y M) => M (M (Y M)) => ... のようにMを繰り返し適用できるので再帰的な計算を行える。 ここでYの型を考えると、Y MがMの不動点なので Y :: (a ->

    不動点演算子 - 純粋関数型雑記帳
  • Y Combinatorって言いにくいから不動点演算子で。 (リリカル☆Lisp 開発日記)

    なんか最近(*) Y Combinator(以下『不動点演算子』)の話題が各所であがっていますが、 あれこれ話はあるものの結局のところ、 F(YF) = YF という式を成り立たせるもの――"不動点"という名の通り、YFをFの不動点にするものだと思います。 (ここの説明が分かりやすいかと。) 不動点演算子自身はこれ以上でも以下でもなく、使い道し次第かと。 記号や演算を最小限にしたのがλ計算だって話もあがってますが、 単純にするならもっと単純にできます。 K ≡ λxy.x S ≡ λxyz.(xz)yz この二つを使えば関数抽象(関数の作成)をすることなく、 関数適用(関数の呼び出し)だけで全てを表せます。 例えば、チャーチ数の 0≡λgu.u は ((s ((s (k s)) (k k))) (k k)) と表せますし、 チャーチ数の後者関数 suc≡λxgu.g((x

  • http://www.sharp-bang.jp/d2/2005/11/

  • ラムダ計算ABC

    仙台ロジック倶楽部 ラムダ計算ABC 数学セミナー92年8月号より A. ラムダ計算とは 今から60年程前、プリンストン大学の若手論理学者A.チャーチが、関数の新しい表記法を提案しました。ラムダ記法と呼ばれるその表記法では、例えば二乗を計算する関数は λx.x^2 と表します。従来の"f(x)"という書き方は、それが関数を表すのか、関数のxにおける値を表すのかが曖昧なので、ラムダ記法では、関数fのxにおける値をfxで示し、xにおける値がf(x)となる関数fをλx.f(x)と表すのです。 "f(x)"という表記法の欠陥は、高校の数学までではほとんど表面化しませんが、大学に入ってから定義域や値域が関数の集合になるような高階関数(オペレータとか作用素とも呼びます)を扱いだすとすぐわかります。作用素などというとひどく特殊なもののようですが、関数f(x)にその導関数f'(x)を対応させる微分演算子D

  • lambda式

    lambda(ラムダ)式は,(名前のない)関数を記述するものである. たとえば,ある数に1を加える関数は,lambda式を使って, (lambda (x) (+ x 1)) と定義できる.lambda式を演算子として引数を与えれば > ((lambda (x) (+ x 1)) 0) 1 のように,関数の値を計算できる. これは,通常の関数の呼出しと全く同様である. また(名前をもった)新しい関数の定義は,通常defineを用いて, > (define (succ x) (+ x 1)) などとするが,実はこれは > (define succ (lambda (x) (+ x 1))) のように,lambda式によって記述される関数にdefineで名前を定義することの便 宜上の省略形式である.なお,一般にこのような便宜的な記法のことをsyntax sugar(文法上の砂糖)という. la

  • ラムダ計算 - Wikipedia

    この記事には参考文献や外部リンクの一覧が含まれていますが、脚注による参照が不十分であるため、情報源が依然不明確です。 適切な位置に脚注を追加して、記事の信頼性向上にご協力ください。(2020年5月) ラムダ計算(ラムダけいさん、英語: lambda calculus)は、計算という行為を「関数」の定義と適用だけで表現する計算模型(数理モデル)である。ラムダ算法とも言う。 1930年代に数学者のアロンゾ・チャーチとスティーヴン・コール・クリーネによって、「計算できるとはどういうことか」を厳密に定義するために考案された。当時はまだ電子計算機は実用化されておらず、ラムダ計算は純粋に理論的な数学的体系として発展した。関数を定義する際にギリシャ文字のラムダ(λ)を使う慣習からその名がある。 ラムダ計算は、変数と関数の抽象化、および関数の適用という基的な操作のみから構成されるが、全ての計算可能関数を

  • λ計算とは コンピュータの人気・最新記事を集めました - はてな

    まず無限個の変数が与えられているとする。変数は通常x, yなどど記述される。変数から出発し、次の操作を繰り返して得られるものをλ式と呼ぶ。 λ抽象 λ式Mと変数xから、式λx. Mを生成する操作。これは、変数xに引数を受け取り、値Mを返す関数を意図する。Mに含まれる変数xはこのλにより束縛されるという。ただし、すでに束縛されているものは除く。 関数適用 二つのλ式M, Nを並べて結合した式MNを作る操作。これは式Mが表す関数に引数としてNを与えることを意図する。 またλ抽象や関数適用の範囲を明確にするために括弧を用いる。 例: (λx. xx)(λx. xx),λf.(λx.(f (x x)) λx.(f (x x)))

    λ計算とは コンピュータの人気・最新記事を集めました - はてな
  • 1