私は、ac#のバックグラウンドから来て、スキームにまったく慣れていません。
ラムダのハンドルを取得していると思いましたが、この例が機能する理由がわかりません。
(let ([f (lambda x x)]) (f 1 2 3 4) )
答えは(1 2 3 4)ですが、どうやって?それは私が得られないxxの部分です。ラムダはパラメーターを受け取らないので、本体はxxですよね?しかし、この場合、それが何を意味するのかわかりません、誰かが説明できますか?ありがとう。
実際、lambda
コード内のはパラメーターとその数を受け取っています。lambda
パラメータのないaの構文は異なります。
(let ([f (lambda () 1)]) (f))
=> 1
lambda
質問の表現は別のものです:
(lambda x x)
可変数の引数をリストとして受け取り、それらを返します。あなたはそれf
に名前を付けました、そしてそれがこのように呼び出されたとき:
(f 1 2 3 4)
すべての引数がリストにバインドされx
、の値が返されます。x
'(1 2 3 4)
つまり、複数の引数を受け取る恒等関数にf
すぎません。おそらくこの答えは、可変個引数関数がスキームでどのように定義されているかを明らかにするでしょう。完全を期すために、単一の引数を受け取り、それを返すaの例を次に示します。lambda
(let ([f (lambda (x) x)]) (f 1))
=> 1
これで、lambda
0、1、または多くのパラメーターを受け取るを定義する方法がわかりました。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加