-2

ラムダがスキームでどのように機能するかを誰か説明してもらえますか? たとえば、ここでどのように機能するか:

(define (prepend-every prefix sent)
  (every (lambda (wd) (word prefix wd)) sent))

またはここ:

(define (first-last sent)
  (keep (lambda (wd) (equal? (first wd) (last wd))) sent))

> (first-last '(california ohio nebraska alabama alaska massachusetts))
'(OHIO ALABAMA ALASKA)
4

1 に答える 1

4

特殊な形式lambdaは無名プロシージャです。示されている例では、別のワンショット関数を定義することを避けるための省略形です。たとえば、最初のスニペットは次と同等です。

(define (helper wd)
  (word prefix wd))

(define (prepend-every prefix sent)
  (every helper sent))

しかし、一度だけ使用される新しいプロシージャを定義する必要はありません。そのためlambda、この場合に使用します。また、関数定義が次のように記述されていることを覚えておくとよいでしょう。

(define (f x)
  <body>)

… は、この同等の形式の短い構文です。

(define f
  (lambda (x)
    <body>))

結局、Scheme のすべての手続きは内部にあるlambdaのです。、などlambda、 に変換できる他の特別な形式があります。さらに明確にするために、これらの投稿を見てください。letlet*

于 2013-10-27T20:04:35.410 に答える