2016-12-06 7 views
1

Ich muss eine Funktion in Racket ISL schreiben, die eine Liste von Zahlen nimmt und die kleinste Zahl in der Liste zurückgibt. Beide Min und Max sind nicht erlaubt. Ich denke, ich habe hier einen Anfang; offensichtlich ist Rekursion erforderlich.Kleinstes Element in einer Liste von Zahlen in Racket ISL zurückgeben?

Schließlich werde ich diese Funktion verwenden, um eine abstrakte zu erstellen.

(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)] 
    [(

Antwort

1

Es sieht so aus, als ob Ihr Base Case gut ist. Ihr Standardfall kann wie folgt aussehen: Verwenden Sie find-smallest, um den kleinsten Rest der Liste zu finden und vergleichen Sie diesen mit dem ersten Element, z. mit <. Das Kleinste sollte dann das Ergebnis sein.

+0

Wow, ich wusste nicht, dass es einfach war! Vielen Dank! –

0

Man kann auch innere namens let Schleife und eine temporäre Variable verwenden kleinsten Wert speichern kleinste Nummer der Liste zu finden:

(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))]))) 
Verwandte Themen