1

私はこれを得る

(define (ident x) x)

と同じです

(define ident (lambda (x) x))

しかし、ここで前者を単純に使用できるのに、なぜラムダを使用するのでしょうか? もう少しシンプルに見えませんか?

4

4 に答える 4

2

あなたの例が a の唯一の使用であるlambda場合、明らかに冗長です。しかし、次のように、lambda以外にも多くのアプリケーションがあります。define

(map (lambda (x y)
       (sqrt (+ (* x x) (* y y))))
     '(3 6 9) '(4 8 12))
于 2013-10-27T19:28:22.360 に答える
2

はい、通常、関数を定義して名前を付けるときに省略形を使用します。

すぐに使用する関数を定義すると便利な場合があり、名前は必要ありません。多くの場合、これらは「無名関数」と呼ばれます。名前を付ける必要がない場合は、名前を付ける必要がないのは良いことです。

たとえば、リスト内のすべての項目に 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

通常は省略形を使用して名前付き関数を定義する場合でも、それを学び、覚えておくとよいでしょう。

于 2013-10-27T19:30:13.303 に答える