1

Racket ISL で、数値のリストを受け取り、リスト内の最小の数値を返す関数を作成する必要があります。min と max の両方を指定することはできません。私はここからスタートしたと思います。明らかに再帰が必要です。

最終的には、この関数を使用して抽象的な関数を作成します。

(check-expect (find-smallest (list 3 8 4 9 2 0 1)) 0)
(check-expect (find-smallest (list 2 3 4 5 6)) 2)
(check-expect (find-smallest (list 58 37 28 37 58 92 24)) 24)
(check-expect (find-smallest (list 19 38 46 85 19 38 19)) 19)

;; find-smallest: list of numbers -> number
;; consumes a list of numbers and returns the
;; smallest number in the list
(define (find-smallest lon)
  (cond
    [(empty? (rest lon)) (first lon)]
    [(
4

2 に答える 2

1

あなたのベースケースは良いようです。デフォルトのケースは次のとおりです。find-smallestリストの残りの最小のものを見つけて、これを最初の要素と比較するために使用します。と<。最小のものは結果になるはずです。

于 2016-12-07T00:31:10.943 に答える
0

内部の名前付き let ループと一時変数を使用して最小値を格納し、リストの最小数を見つけることもできます。

(define (find-smallest l)
  (let loop ((l l)
             (sm (first l))) ; start with first of list as smallest
    (cond
      [(empty? l) sm]
      [(< sm (first l))
       (loop (rest l) sm)]
      [else
       (loop (rest l) (first l))]))) 
于 2016-12-07T09:21:44.147 に答える