减少Racket的功能?

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)

  • 你是对的,答案似乎是正确的.你走吧.:)为什么[tag:scheme]中的ppl不相互投票,我不明白.这不像我们这里有大量观众.你能展示一下`zip`的定义吗?或者你使用内置?(好吧,显然它是`(define(zip ab)(地图列表ab))`,但为了完整起见,它应该在答案内部). (2认同)

Jac*_*ack 6

你可以用以下方式表达它foldl:

(define (reduce f xs)
  (and (not (empty? xs)) (foldl f (first xs) (rest xs))))
Run Code Online (Sandbox Code Playgroud)