[英]Reading racket code and interpreting in 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)))))
我不是 Racket 專家,但我至少可以閱讀該代碼並弄清楚它的作用。
讓我們從set-subset?
. 這是一個遞歸 function ,它接受兩個列表s1
和s2
,並返回s1
中的每個項目是否在s2
內。 這個 function 通過返回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))
盡管這確實假設s1
和s2
是list
s 而不是set
s。 (如果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)
in Racket 相當於s1.issubset(s2)
在 Python 3 和(set-equal? s1 s2)
到s1 == s2
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.