2
(lambda (head . rest)
     (...))

スキームを学ぼうとしているときにネットでこのコードに遭遇しましたが、有用な説明が見つかりませんでした。

これはどういう意味ですか?ML のようなパターン マッチングのようなものですか?(ちなみに、彼らはこのラムダを 1 つの引数にのみ適用します!)

4

2 に答える 2

3

この手順では:

(lambda (arg . args)
     (...))

この構文は、lambdaフォームが name にバインドされた 1 つの必須引数と、 name にバインドされたarg0 個以上の要素 (可変数の引数) を持つリストを期待していることを示していますargs。これは可変個引数関数の例です。

名前付きプロシージャにも同じ構文を使用できます。任意の数のパラメータを必須として指定でき、その後は残りがオプションと見なされることに注意してください。この例を見てください:

(define (test arg . args)
  (apply + arg args))

(test)        ; will cause an error, at least one argument is expected
(test 10)     ; returns 10
(test 10 4)   ; returns 14
(test 10 4 2) ; returns 16
于 2012-11-19T19:04:59.027 に答える
2

これが»ドットテール表記«です。これにより、任意の数の引数を関数に渡すことができます。説明については、 SICP、演習 2.20を検討してください (下にスクロールしてください)。

于 2012-11-19T18:36:50.460 に答える