2016-04-04 10 views
-1

Ich brauche eine Erklärung, wie der folgende Code für die Berechnung von Kombinationen einer Liste funktioniert.Racket-Kombinationen Funktion

(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)))))) 

Antwort

0
  • Null-Elemente aus einer Liste Kombination gibt '(()).
  • Kombinieren Sie alles aus einer leeren Liste geben '().
  • Für den letzten Fall hat das Ergebnis aus zwei Teilen:
    1. Die Kombinationen, die (car L) und
    2. Die Kombinationen enthalten, die nicht tun.

Die Antwort für Punkt 2 ist nur auf Kombinationen von k Elemente aus (cdr L) zu machen.
Für Element 1 bilden Sie die Kombinationen k - 1 Elemente aus (cdr L), und fügen Sie dann (car L) zu jedem hinzu.

Verwandte Themen