これは宿題です:
与えられた述語を満たす与えられたリストのすべての要素を含むリストを返します。例えば、
(filter (lambda (x) (< x 5)) '(3 9 5 8 2 4 7))
(3 2 4) を返す必要があります。
昨日スキームを始めたばかりなので、完全な初心者です。この関数関数呼び出しの構文を正しく理解していれば、"filter" が関数で、"(lambda (x) (< x 5)" が引数です。これは Java の無名関数に似ていますか?
編集:
stackoverflow の別の投稿からいくつかのコードを見つけました。彼らはただまっすぐに質問に答えました:これが彼らが書いたものです:
(define (my-filter pred lst)
(cond ((null? lst) null)
((pred (first lst))
(cons (first lst) (my-filter pred (rest lst))))
(else (my-filter pred (rest lst)))))
これは良いことであり、機能しますが、使用する前に理解したいと思います。「pred」は関数ですが、この例では (< x 5) を渡しており、何らかの形でこの値を受け入れています。わからないこと。
このプログラムで何が起こるか説明してもらえますか? 何が起こっているかの背後にあるロジックがわかりません。