1

I have to write a function in Racket ISL that takes a list of numbers and returns the smallest number in the list. Both min and max are not allowed. I think I have a start here; obviously recursion is needed.

Eventually I'll use this function to create an abstract one.

(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 回答