读取球拍代码并在python3中解释



我想了解代码真正转化为python3的内容,因为我无法在球拍中跟随它。谢谢你!

(define set-equal?
(lambda (s1 s2)
(and (set-subset? s1 s2)
(set-subset? s2 s1))))
(define set-subset?
(lambda (s1 s2)
(or (null? s1)
(and (member (car s1) s2)
(set-subset? (cdr s1) s2)))))

我不是一个球拍专家,但我至少可以阅读代码并弄清楚它是做什么的。

让我们从set-subset?开始。这是一个递归函数,它接受两个列表s1s2,并返回s1中的每个项是否在s2内。此函数的工作方式是返回s1是否为空,或者s1的第一个元素是否为s2的成员,以及s1中除第一个元素外的所有元素的列表是否为s2的子集。

(null? s1)返回列表s1是否为空,(car s1)返回列表s1的第一个元素,(cdr s1)返回列表s1中除第一个元素以外的所有元素。

你可以把它翻译成Python中的

def set_subset(s1, s2):
return (not s1) or (s1[0] in s2 and set_subset(s1[1:], s2))

尽管这里假设s1s2lists而不是sets(如果s1是一个集合,则不能调用s1[0]s1[1:])

set-equal?建立在set-subset?之上:如果两个集合互为对方的子集,则它们相等。同样,这将在Python中转换为

def set_equal(s1, s2):
return set_subset(s1, s2) and set_subset(s2, s1)

这些函数假定列表中没有任何重复的值。

然而,如果你在Python 3中使用set对象,你不需要这些函数中的任何一个,因为Python 3已经内置了这些操作:球拍中的(set-subset? s1 s2)相当于Python 3中的s1.issubset(s2),(set-equal? s1 s2)相当于s1 == s2

相关内容

  • 没有找到相关文章

最新更新