2
(define (unknown (lambda (x y)
  (cond
    ((null? y) y)
    ((x (car y)) (unknown x (cdr y))))
    (else (cons (car y) (unknown x (cdr y)))))))

私はスキームに関しては初心者で、教科書で見つけたこの関数の目的を知りたいと思っていました。私の主な疑問は、 ((x (car y)) が何をするのかということです。この式は演算子なしでどのように実行されるのですか?コンパイル中にエラーに遭遇することはありません。 x に入力した値は明らかに関数には適用されません。助けてください。

4

1 に答える 1

3

スキーム関数は関数を引数として取り、関数を返すことができます。関数を引数として渡す場合、コードは理にかなっています。

次のようにコードを呼び出す場合:

(unknown even? '(1 2 3 4 5))

次に、リスト (1 3 5) を返す必要があります。これは、関数 x をメンバーに適用した結果が false である y のメンバーを返すフィルター関数です。

于 2014-09-10T18:23:06.283 に答える