and recursion functional-programming scheme racket

recursion - and - ¿Reduce la función en Racket?



list racket (3)

Aqui tienes.

(define (reduce func list) (assert (not (null? list))) (if (null? (cdr list)) (car list) (func (car list) (reduce func (cdr list)))))

Pruebas:

> (reduce + ''(1 2 3 4 5 6 7 8 9 10)) 55 > (reduce zip ''((1 2 3) (4 5 6) (7 8 9))) ((1 (4 7)) (2 (5 8)) (3 (6 9)))

Para completar, una implementación para zip (una que asume dos listas y que sus listas tienen la misma longitud) es:

(define (zip l1 l2) (map list l1 l2))

Estoy atrapado 5 días con esta tarea en Racket, ¿alguien sabe cómo puedo abordarlo?

Dada una función de arity 2 y una lista de n elementos, devuelve la evaluación de la función de cadena de todos los elementos, por ejemplo:

>(reduce + ''(1 2 3 4 5 6 7 8 9 10)) 55 > (reduce zip ''((1 2 3) (4 5 6) (7 8 9))) ''((1 (4 7)) (2 (5 8)) (3 (6 9)))


Puedes expresarlo en términos de foldl :

(define (reduce f xs) (and (not (empty? xs)) (foldl f (first xs) (rest xs))))


(define reduce (λ (f init ls) (if (empty? ls) init (reduce f (f init (first ls)) (rest ls)))))