2017-12-27 231 views
0

我方案以下数组:总结各行的第一n个元素中的2D阵列方案

((64 28 52 24) (68 29 62 29) (20 72 48 60) (45 102 75 51) (36 84 72 64) (80 9 63 60) (20 56 72 24) (57 53 88 63)) 

欲形成通过累加“组合” Ñ行的2D阵列在一行中。例如,假设n = 2前两行我们将合并成一行((132 57 114 53) ...)

回答

0

好的,所以你在这种情况下有一个事物(行)的列表,并且你想一次对它们应用一个操作f(添加行)n。所以我会为(on-chunks n f lst)制作一个通用功能。

然后您的操作可以定义为(on-chunks 2 row-sum matrix)。定义行数很容易:(define (row-sum row1 row2) (map + row1 row2))

对于分块部分,我建议为它定义一个帮助函数,它将一个块从列表的前面取出并返回两个值:该块,列表的其余部分。然后通过调用该函数,可以通过递归实现on-chunks。例如(chunk-aux 2 '(a b c d e f)) ;=> (a b) (c d e f)

我希望有帮助!

0

扩大在上述答案,折叠将是一个非常简单的方法来递归地总结n行,而SRFI-1的(take)(drop)程序将分裂为所需的二维列表:

(use srfi-1)  

(define (sum-rows xs) 
    (foldl (lambda (x acc) 
      (map + x acc)) 
     (car xs) 
     (cdr xs))) 

(define (merge-rows xs n) 
    (cons (sum-rows (take xs n)) 
     (drop xs n))) 

虽然性能不适用于荒谬的长列表,因为(take)(drop)可能是冗余计算。

相关问题