2017-02-19 13 views
0

Привет, Я пытаюсь определить функцию, которая должна сделать набор из частей этого набора. Должно быть определено как: P (A) = P (A- {x}) U {{x} UB} для всех B, принадлежащих P (A- {X}), где X принадлежит A.Набор схем, сделанных из частей набора

испытание было бы:

(частей «(ABC)) => ((ABC) (AB) (ас) (а) (BC) (б) (в)())

Я пытался с этим:

(определяют (MAPC FXL) (если (нуль л) л (cons (f x (автомобиль 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).

После короткого кода в Ракетка (производное Scheme) получает все комбинации или части:

(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)) 
Смежные вопросы