2016-10-18 4 views
-1
(define (element-of-set x lst1) 
(cond ((null? lst1) '()) 
    ((equal? x (car lst1)) (cons (car lst1) (element-of-set x (cdr lst1)))) 
    (else 
    (element-of-set x (cdr lst1))))) 

(define (helper set1 set2) (append set1 set2)) 

(define (union-set set1 set2) 
(cond ((null? set1) '()) 
    ((> (length (element-of-set (car set1) (helper set1 set2))) 1) (cons (car set1) (union-set (cdr set1) (cdr set2)))) 
    ((> (length (element-of-set (car set2) (helper set1 set2))) 1) (cons (car set2) (union-set (cdr set1) (cdr set2)))) 
    (else 
    (append (helper set1 set2) (union-set (cdr set1) (cdr set2)))))) 

このコードは、2組の和集合を見つけると仮定しています。私は2つのセットを一緒に入れようとしましたが、何度か繰り返していましたが、うまくいきませんでした。これはどのように計画で2組の和集合を作る方法

答えて

0

は:

FYI
#lang racket 
(require racket/set) 

(define (union-set set1 set2) 
    (set-union set1 set2)) 

(union-set '(1 2 3) '(4 3 2)) 
=> '(4 1 2 3) 

setがあるラケットでのデータ型を内蔵するので、それは和集合を書くのは簡単だ - だけで、既存のプロシージャを呼び出します!とにかく、独自のバージョンをロールしたい場合は、現在の実装より簡単で簡単です。

(define (element-of-set x lst1) 
    (cond ((null? lst1) #f) 
     ((equal? x (car lst1)) #t) 
     (else (element-of-set x (cdr lst1))))) 

(define (union-set set1 set2) 
    (cond ((null? set1) set2) 
     ((element-of-set (car set1) set2) 
     (union-set (cdr set1) set2)) 
     (else 
     (cons (car set1) (union-set (cdr set1) set2))))) 
+0

必須はR5RSで定義されていません。 –

+0

これはR5RSではありませんが、これはRacketです(最初の行を参照)。とにかく、解決策を手作業で更新しました。是非、出力リストを作成するときに 'append'と' length'を使わないでください。解決策を書くのにはるかに良い方法があります。 –

+0

入力すると(union-set '(1 2 3)'(2 1 5 6))、それは私に(2 1 5 6)を与えます。しかし、3が出力に含まれている必要があります。 –

関連する問題