Самое простое решение - использовать вариант for
, называемый for/fold
.Я думал, что есть for/min
, но, увы.
#lang racket
(define v (vector 11 12 13 4 15 16))
(for/fold ([m +inf.0]) ([x (in-vector v)])
(min m x))
Если вам нравится более явный подход:
(define (vector-min xs)
(define n (vector-length xs))
(let loop ([i 0] ; running index
[m +inf.0]) ; minimum value so far
(cond
[(= i n) ; if the end is reached
m] ; return the minimum
[else ; else
(define x (vector-ref v i)) ; get new element in vector
(loop (+ i 1) ; increment index
(min m x))]))) ; new minimum
ОБНОВЛЕНИЕ
(let loop ([x 1] [y 10])
(loop (+ x 1) (- y 1))
- то же самоекак:
(let ()
(define (loop (x y)
(loop (+ x 1) (- y 1)))
(loop 1 10))