簡體   English   中英

在python3中讀取球拍代碼和解釋

[英]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 ,它接受兩個列表s1s2 ,並返回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))

盡管這確實假設s1s2list 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM