如何检查 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)))))
如果 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)))))