use*_*726 9 recursion scheme functional-programming racket
我在Racket中遇到了这个任务5天,有人知道我该如何处理它?
给定arity 2的功能和n元素列表,返回所有元素的字符串函数的评估,例如:
>(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)))
Run Code Online (Sandbox Code Playgroud)
GoZ*_*ner 12
干得好.
(define (reduce func list)
(assert (not (null? list)))
(if (null? (cdr list))
(car list)
(func (car list) (reduce func (cdr list)))))
Run Code Online (Sandbox Code Playgroud)
测试:
> (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)))
Run Code Online (Sandbox Code Playgroud)
为了完整性,zip(一个假定两个列表且列表长度相同的实现)是:
(define (zip l1 l2) (map list l1 l2))
Run Code Online (Sandbox Code Playgroud)
你可以用以下方式表达它foldl:
(define (reduce f xs)
(and (not (empty? xs)) (foldl f (first xs) (rest xs))))
Run Code Online (Sandbox Code Playgroud)