foldlistを使用してRacketで関数を記述する必要があります。これは、数値のリストを取り、その後の数値より大きいリスト要素を削除します。Racketでfoldrを使用して、後続の数値より大きいリスト内の数字を削除する方法
例:(排除-大きい(リスト1 2 3 5 4))(1 2 3 4)を生成する必要があり
Iはfoldrまたは任意の高次関数を使用せずにそれを行うことができ、私は理解できませんそれはfoldrでそれを出します。ここで私が持っているものです。
(define (eliminate-larger lst)
(filter (lambda (z) (not(equal? z null)))
(foldr (lambda (x y)
(cons (determine-larger x (rest lst)) y)) null lst))
)
(define (determine-larger value lst)
(if (equal? (filter (lambda (x) (>= x value)) lst) lst)
value
null)
)
決定-大きな値とリストに取ると、それがより大きいか、リスト内のすべての要素と等しい場合、その値を返します。そうでない場合、nullを返します。今度は、より大きな機能を排除することは、リストを通って、各値をそれ以降のすべての数のリストと共に決定するために渡すことを試みています。それが "良い"値であれば、リストにnullが入れられていなければ、それが返されてリストに入れられます。そして、最後にヌルがフィルタリングされています。私の問題は、foldr関数の現在の番号の後に続く数字のリストを取得しています。 "rest lst"を使用すると、そのような再帰的に行われていないので機能しません。 foldrのxの後ろの残りの数字はどのようにして得られますか?
作品、ありがとう!私はandmapがどのように動作するのかを調べようとしていますが、それが何をしているのかは全く分かりません。 –
'member'がアキュムレータリストのすべての要素であることを検証するために' andmap'が使用されています。 'filter'のような関数を使用するのと比べて、与えられたprocの_any_アプリケーションが'#f'を返すならば早期に返るという利点があります(例えば '(<= 5 4)')。 – pdoherty926
@KeithCalderwoodあなたがこの答えに満足すれば、それを受け入れるでしょうか? – pdoherty926