23 lines
420 B
Scheme
23 lines
420 B
Scheme
(define (map f xs)
|
|
(if (null? xs)
|
|
'()
|
|
(cons (f (car xs))
|
|
(map f (cdr xs)))))
|
|
|
|
(define (foldl f z xs)
|
|
(if (null? xs)
|
|
z
|
|
(foldl f (f (car xs) z) (cdr xs))))
|
|
|
|
(define (range n)
|
|
(define (go i)
|
|
(if (> i n)
|
|
'()
|
|
(cons i (go (+ i 1)))))
|
|
(go 1))
|
|
|
|
;; 1² + 2² + 3² + 4² = 30
|
|
(let* ([sqr (lambda (x) (* x x))]
|
|
[sqrs (map sqr (range 4))])
|
|
(foldl + 0 sqrs))
|