在python3中读取球拍代码并进行解释
我想了解代码到底翻译成了什么python3,因为我无法在racket中理解它。谢谢大家!在python3中读取球拍代码并进行解释,python,racket,Python,Racket,我想了解代码到底翻译成了什么python3,因为我无法在racket中理解它。谢谢大家! (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?
(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)))))
我不是一个球拍专家,但我至少可以阅读这些代码并弄清楚它的作用 让我们从
集合子集开始?
。这是一个递归函数,它包含两个列表,s1
和s2
,并返回s1
中的每个项目是否在s2
中。此函数通过返回s1
是否为空,或者s1
的第一个元素是否为s2
的成员,以及s1
中除第一个元素以外的所有元素的列表是否为s2
的子集来工作
(null?s1)
返回列表s1
是否为空,(car s1)
返回s1
的第一个元素,(cdr s1)
返回列表s1
中除第一个之外的所有元素
您可以将其转换为Python,如下所示
def set_子集(s1、s2):
返回(不是s1)或(s2中的s1[0]并设置_子集(s1[1:],s2))
虽然这确实假设s1
和s2
是list
s而不是set
s。(如果s1
是一个集合,则不能调用s1[0]
或s1[1://code>)
set equal?
基于set subset?
构建:如果两个集合都是彼此的子集,则两个集合是相等的。同样,这将转换为Python,如下所示
def set_等于(s1,s2):
返回集_子集(s1,s2)和集_子集(s2,s1)
这些函数假定列表没有任何重复值
但是,如果您在Python 3中使用set
对象,则不需要这两个函数中的任何一个,因为Python 3已经内置了这些操作:(set subset?s1 s2)
在Racket中相当于s1。在Python 3中,issubset(s2)
(set equal?s1 s2)
到s1==s2
FYI,Racket还有一个内置的子集?
谓词。事实上,有。非常感谢您的快速回复。这是可行的,但如果可能的话,我怎么能这样做呢?如果我给这个输入:set_equal([1,2,3,4]],[4,3,2,1]),它会返回true。是的,s1,s2是一个列表。我想找到列表的子集,如果有效,则返回true,如果为false,则返回false。因此,类似于:设置相等([1,[2,[3,4]]],[4,3,2],1]]])的内容是错误的。@blooducker:请另外问一个问题。