私はこれを得る
(define (ident x) x)
と同じです
(define ident (lambda (x) x))
しかし、ここで前者を単純に使用できるのに、なぜラムダを使用するのでしょうか? もう少しシンプルに見えませんか?
あなたの例が a の唯一の使用であるlambda
場合、明らかに冗長です。しかし、次のように、lambda
以外にも多くのアプリケーションがあります。define
(map (lambda (x y)
(sqrt (+ (* x x) (* y y))))
'(3 6 9) '(4 8 12))
はい、通常、関数を定義して名前を付けるときに省略形を使用します。
すぐに使用する関数を定義すると便利な場合があり、名前は必要ありません。多くの場合、これらは「無名関数」と呼ばれます。名前を付ける必要がない場合は、名前を付ける必要がないのは良いことです。
たとえば、リスト内のすべての項目に 2 を追加するとします。map
これには、2 を加算する関数を指定して使用できます。次のように記述できます。
(define (add-2 x)
(+ x 2))
(map add-2
(list 1 2 3))
ただし、これが一度だけ必要な場合はadd-2
、代わりに次のように記述できます。
(map (lambda (x) (+ x 2))
(list 1 2 3))
ちなみに、これcurry
を次のように書くこともできます。
(map (curry + 2)
(list 1 2 3))
curry
関数を作成する関数です。Scheme や Racket などの言語では、このような「高階関数」を使用することで、物事を簡潔に表現し、パターンを活用することができます。
Scheme と Racket では、変数は数値や文字列などの値を持つことができ、関数にすることもできます。関数は、数値や文字列と同様に、「第一級」の値です。あなたが尋ねた最初のフォームはそれを明確にしています:
(define x 1)
(define y "foo")
(define f (lambda (x) (+ x 2)) ;a function is a value like any other
通常は省略形を使用して名前付き関数を定義する場合でも、それを学び、覚えておくとよいでしょう。