私は以下のプログラムコードを理解していません。誰も私にそれを説明することはできますか?Scheme(DrRacket)ラムダ式
(define myFunction
(lambda (f x y z)
(f x y z)))
どうすれば簡単にできますか?
私は以下のプログラムコードを理解していません。誰も私にそれを説明することはできますか?Scheme(DrRacket)ラムダ式
(define myFunction
(lambda (f x y z)
(f x y z)))
どうすれば簡単にできますか?
あなたはそれがまったく同じことを定義するための構文的なショートカットです
(define (myFunction f x y z)
(f x y z))
として、ビット構文見せることを除いて、ずっとそれを簡略化することができません。
この方法で、あなたは書き換えルールとして精神的に扱うことができます:あなたのコードで
(myFunction f x y z)
を見るたびに - f
は、x
、y
とz
プレースホルダが参照しているものは何でも- あなたは置き換えることができます
(f x y z)
実際の値、別名引数をプレースホルダに置き換えて、別名function parameter ers。
したがって、あなたは意味をなすために、新しいコードのために、f
は三つの引数、x
、y
とz
を受け入れることができる機能であることを参照してください。
したがって、たとえば、あなたが(define (f x y z) (+ x y z))
を定義した場合、あなたは
(myFunction f 1 2 3)
を呼び出すことができますし、戻って結果を得る - あなただけの上で定義した関数f
を呼び出した結果である、値,および。
f
内部myFunction
は、値を参照するグローバル名f
という名前のファンクションを参照します。 lambda
フォームは値を定義します - 無名関数 - define
はそれにという名前をバインドします。その名前の使用はその値を参照します。これ以降はf
となります。スキームでは、関数は他の値と同じです。グローバル関数f
が、それはそれらを受信したときそれが受け取る三つの引数、に+
を適用するために定義されていること
。実際には、「私に3つの値を与え、あなたのためにそれらを合計します」と言っています。(myFunction f 1 2 3)
はあなたの選択した3つの値を持っています。
lambda ...
は、4つの引数を必要とする関数を作成します。最初の引数(f
)自体が関数である必要があります。 (f x y z)
は、このf
を他の3つの引数に適用します。
define
は、ラムダにmyFunction
という名前を付けます。
お返事ありがとうございます。しかし、あなたがそうであれば(定義する(f x y z) (+ x y z)) ラムダexpresionsの2番目のfはまだ動作しません。次のエラーメッセージが表示されます(関数呼び出し:開いたかっこの後の関数が必要ですが、変数が見つかりました) – Memo
ありがとうございます。 – Memo