Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python3中读取球拍代码并进行解释_Python_Racket - Fatal编程技术网

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

在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?

我想了解代码到底翻译成了什么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? (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:请另外问一个问题。