数字のリストで最小の要素を見つけようとしています。高次関数を使用するリスト内の最小要素
明示的な再帰を使用している場合これは簡単ですが、私はもっぱら
map
のような組み込みの高階関数を使用して、これを行う方法を探しています、
filter
、
およびfoldr
。
つまり、私が探しているものを得るためにこれらの機能の組み合わせを使用したいと思います。
数字のリストで最小の要素を見つけようとしています。高次関数を使用するリスト内の最小要素
明示的な再帰を使用している場合これは簡単ですが、私はもっぱら
map
のような組み込みの高階関数を使用して、これを行う方法を探しています、
filter
、
およびfoldr
。
つまり、私が探しているものを得るためにこれらの機能の組み合わせを使用したいと思います。
foldrを使用します。アキュムレータは+ inf.0で始まります。 combine-accumulator-and-elementは、アキュムレータと要素の最小値を返す必要があります。
数字のリストの中で最小の要素を見つけようとしています。
明白な方法は、あなた自身のmin
手順を実装する必要がある場合は、内蔵しかしmin
#lang racket
(apply min '(5 2 3 6 4 0 9 -3 2 6))
;; => -3
、foldlがお手伝いします使用することです。私もこのプロシージャを空のリストで使用しようとするとエラーをスローしました - ゼロ引数にそれを適用しようとすると、組み込みのmin
のようになります。
#lang racket
(define (min xs)
(match xs
((list x xs ...) (foldl (λ (x acc) (if (< x acc) x acc))
x
xs))
(_ (error 'min "must use non-empty list"))))
(min '(5 2 3 6 4 0 9 -3 2 6))
;; => -3
(min '())
;; => min: must use non-empty list
一つは、リスト上で「ソート」機能を使用して、ソートされたリストの最初の要素を取ることができます:スキーム
(first (sort '(5 2 3 6 4 0 9 -3 2 6) <))
;; => -3
過度に慣れていないが、あなたが繰り返し最初よりも小さいすべての要素をフィルタリングすることができリストサイズが1になるまでリスト内の1つ? – gowrath