朋友及关系

(define set?
  (lambda(lat)
    (cond
      ((null? lat)#t)
      ((member?(car lat)(cdr lat))
       #f)
      (else(set?(cdr lat))))))

(define multirember
        (lambda(a lat)
          (cond
            ((null? lat)(quote()))
            ((eq?(car lat)a)
             (multirember a (cdr lat)))
            (else(cons (car lat)
                       (multirember a
                                   (cdr lat)))))))

(define makeset
  (lambda(lat)
    (cond
      ((null? lat)(quote()))
      ((member?(car lat)(cdr lat))
       (makeset(cdr lat)))
      (else(cons(car lat)
                (makeset(cdr lat)))))))
;对于列表lat中重复出现的原子
; 函数makeset会把首次出现的原子cons
;到一般性递归的结果上,而该递归结果
;事先移除了lat中的剩余的重复出现的原子
(define makeset1
  (lambda(lat)
    (cond
      ((null? lat)(quote()))
      (else
       (cons(car lat)
            (makeset
             (multirember(car lat)
                         (cdr lat))))))))

(define subset?
  (lambda(set1 set2)
    (cond
      ((null? set1)#t)
      (else
       (and(member?(car set1)set2)
           (subset?(cdr set1)set2))
       ))))

(define eqset?
  (lambda(set1 set2)
    (cond
      (else(and(subset? set1 set2)
               (subset? set2 set1))))))

(define intersect
  (lambda(set1 set2)
   (cond
     ((null? set1)(quote()))
     ((member?(car set1)set2)
      (cons(car set1)
           (intersect(cdr set1)set2)))
     (else(intersect(cdr set1)set2)))))

(define union
  (lambda(set1 set2)
    (cond
      ((null? set1)set2)
      ((member?(car set1)set2)
       (union(cdr set1)set2))
      (else(cons(car set1)
                (union(cdr set1)set2))))))

(define intersectall
  (lambda(l-set)
    (cond
      ((null?(cdr l-set))(car l-set))
      (else(intersect(car l-set)
                     (intersectall(cdr l-set)))))))

(define a-pair?
  (lambda(x)
    (cond
      ((atom? x)#f)
      ((null? x)#f)
      ((null? (cdr x))#f)
      ((null? (cdr(cdr x)))#t)
      (else #f))))

(define first
  (lambda(p)
    (cond
      (else(car p)))))

(define second
  (lambda(p)
    (cond
      (else(car(cdr p))))))

(define build
  (lambda(s1 s2)
    (cond
       (else(cons s1
                  (cons s2(quote())))))))

(define third
  (lambda(l)
    (car(cdr(cdr l)))))

(define fun?
  (lambda(rel)
    (set?(first rel))))

(define revrel
  (lambda(rel)
    (cond
      ((null? rel)(quote()))
      (else(cons(build
                 (second(car rel))
                 (first(car rel)))
                (revrel(cdr rel)))))))

(define revpair
  (lambda(rel)
    (cond
      ((null? rel)(quote()))
      (else(cons(revpair(car rel))
                (revrel(cdr rel)))))))

(define one-to-one?
  (lambda(fun)
    (fun?(revrel fun))))
    
发布了40 篇原创文章 · 获赞 7 · 访问量 1082

猜你喜欢

转载自blog.csdn.net/BobDay/article/details/103810112