如何检查 set1 是否是 Scheme 中 set2 的子集?

How to check if a set1 is a subset of set2 in Scheme?

如果 set1 是 set2 的子集,我尝试将代码写入 return 'true'。

例如:(subset '(a b) '(a c b d)) --> #t (subset '(a b) '(a c d)) --> #f

这是我所做的,有人能告诉我为什么它不起作用吗?

(define (subset lst1 lst2)
  (cond ((null? lst2) #f)
        ((member (car lst1)  lst2)
         (subset  (cdr lst1)  lst2)
         #t)
        (else #f)))
    ((member (car lst1) lst2)
     (subset (cdr lst1) lst2) 
     #t)

true 那里没有理由。您将问题简化为子问题。

此外,无需检查 (null? lst2),因为您不会遍历 lst2。最终条件必须改为检查 lst1

我会这样写:

(define (subset lst1 lst2)
  (or (null? lst1)
      (and (member (car lst1) lst2)
           (subset (cdr lst1) lst2)))))