2017-02-19 2 views
0

こんにちは、私はそのセットの部分からセットを作るべき関数を定義しようとしています。 XがAに属するP(A- {X})に属するすべてのBについて、P(A)= P(A- {x})U {{x} UB}と定義する必要があります。セットの部分から作られたスキームセット

試験は次のようになります

(部品「(ABC)) =>((ABC)(AB)(AC)(A)(BC)(B)(C)())

私はこの1つにしようとしてきた:

( (ヌル(もしリットル) リットル)MAPC FXL(定義?(cons(f x(car l))(mapc f x(cdr l))))))

答えて

0

多分このようなものでしょうか? (未テスト)

(define (power-set A) 
    (cond 
    [(null? A) '()] ; the power set of an empty set it empty 
    [else  (append (map (lambda (S) (cons x S)) ; sets with x 
          (power-set (cdr A))) 
         (power-set (cdr A))   ; sets without x 
         ])) 
+0

まあ、それは動作しませんが'()を返します。 –

0

これは、本質的に '組み合わせ' 機能(https://docs.racket-lang.org/reference/pairs.html?q=combinations#%28def._%28%28lib._racket%2Flist..rkt%29._combinations%29%29)です。ラケットで短いコード(スキーム誘導体)に続き

すべての組み合わせまたは一部を取得:

(define (myCombinations L) 
    (define ol (list L))  ; Define outlist and add full list as one combination; 
    (let loop ((L L))   ; Recursive loop where elements are removed one by one.. 
    (for ((i L))    ; ..to create progressively smaller combinations; 
     (define K (remove i L)) 
     (set! ol (cons K ol)) ; Add new combination to outlist; 
     (loop K))) 
    (remove-duplicates ol)) 

テスト:

(myCombinations '(a b c)) 

出力:

'(() (a) (b) (a b) (c) (a c) (b c) (a b c)) 
関連する問題