簡體   English   中英

在Scheme中對列表列表進行排序

[英]Sorting a list of list in Scheme

我有一個函數,該函數接受一個列表並輸出該列表的功率集。 因此給定(1 2 3)它應輸出(() (1) (2) (3) (1 2) (1 3) (2 3) (1 2 3))

我目前正在獲取正確的值,只是順序不佳。 當前輸出為(() (3) (2) (2 3) (1) (1 3) (1 2) (1 2 3))

我編寫了兩個函數,這些函數將傳遞給標准sort函數,以檢查每個元素的長度以及是否按順序排列並進行相應排序。 那的輸出給了我((1 2 3) (1 2) (1 3) (1) (2 3) (2) (3) ())

給定最終列表是(() (3) (2) (2 3) (1) (1 3) (1 2) (1 2 3)) ,這兩個函數在做什么?

;定義元素順序

(define (element-ordered? ls0 ls1)
    (cond
        [(equal? ls0 ls1) #t]
        [(< (car ls0) (car ls1)) #t]
        [else #f]))

;定義長度順序

(define (length-ordered? ls0 ls1)
    (cond
        [< (length ls0) (length ls1) #t]
        [> (length ls0) (length ls1) #f]
        [eq? (length ls0) (length ls1) (element-ordered? ls0 ls1)]))

;使用提供的排序進行排序

(sort final-list length-ordered?))

我不確定您的element-ordered? 功能是相當正確的。 這是我想出的:

(define (element-ordered? ls0 ls1)
    (cond
        ((< (car ls0) (car ls1)) #t)
        ((> (car ls0) (car ls1)) #f)
        (else (element-ordered? (cdr ls0) (cdr ls1)))
    )
)

(define (length-ordered? ls0 ls1)
    (cond
        ((< (length ls0) (length ls1)) #t)
        ((> (length ls0) (length ls1)) #f)
        (else (element-ordered? ls0 ls1))
    )
)

還請注意,在您的代碼段中, length-ordered?的條件是length-ordered? 括號不正確,因此這也可能導致您的函數出現問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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