【发布时间】:2018-02-06 05:13:44
【问题描述】:
我有一个函数,它接受一个列表并输出该列表的幂集。因此,(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))。
我编写了两个函数,它们将传递给标准排序函数来检查每个元素的长度,以及它是否有序并进行相应的排序。它的输出给了我((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?))
【问题讨论】: