球拍组合功能

时间:2016-04-04 23:21:54

标签: scheme racket

我需要解释以下用于计算列表组合的代码如何工作。

(define combs L k)
  (cond ((= 0 k)
         '(()))
        ((null? L)
         '())
        (else
         (append (map (λ (x) (cons (car L) x)) 
                          (combs (cdr L) (- k 1)))
                 (combs (cdr L) k))))))

1 个答案:

答案 0 :(得分:0)

  • 合并列表中的零元素会产生'(())
  • 将空列表中的任何内容合并为'()
  • 最后一例,结果分为两部分:
    1. 包含(car L)
    2. 的组合
    3. 没有的组合。

第2项的答案是只组合来自k的{​​{1}}个元素 对于第1项,请构建(cdr L)k - 1元素的组合,然后将(cdr L)添加到每个元素。