【发布时间】:2020-11-12 06:35:02
【问题描述】:
问题
只是为了澄清:这并不是真正意义上的排序。我得到了一个函数(sort-sym lst symbol)。该函数接受一个 (listof (listof symbol)) 和一个符号以将其转换为 (list (listof (listof symbol)) (list (listof symbol)))。仅仅在这里陈述问题并没有太大帮助,所以让我们直接进入示例。
示例
列表
(define example (list
(list 'chocolate 'sweet 'expensive)
(list 'crocodile 'hostile 'big 'heavy)
(list 'brick 'heavy 'red)
(list 'chocolate 'bitter 'dark)))
如果我输入(sort-sym example'chocolate),列表会这样排序:
(list
(list (list 'chocolate 'sweet 'expensive)
(list 'chocolate 'bitter 'dark))
(list (list 'crocodile 'hostile 'big 'heavy)
(list 'brick 'heavy 'red)))
如果输入是(sort-sym example'crocodile),那么列表将是
(list
(list (list 'crocodile 'hostile 'big 'heavy))
(list (list 'chocolate 'sweet 'expensive)
(list 'chocolate 'bitter 'dark)
(list 'brick 'heavy 'red)))
请注意,所有包含单词 'chocolate 的列表都放在一个列表中,所有没有单词的列表都放在另一个列表中。在这种情况下,顺序无关紧要。
另外:两个列表之间的空间只是为了使代码更清晰。
代码
所以我对这个有点迷茫。但是我尝试了一些东西,例如,我尝试使用过滤器。
(define (sort-examples lst sym)
(local [(define (sym-equal? other-sym) (symbol=? other-sym sym))]
(cond [(empty? lst) empty]
[else (cons (filter sym-equal? (first lst))
(sort-examples (rest lst) sym))])))
但这并没有真正的帮助,因为我试图保留列表,而不是从中删除元素。我可以对此有一些指导吗?谢谢。
【问题讨论】:
-
球拍是否支持SRFI-1的
partition?还是编写自己的版本是练习的重点? -
我猜想这个练习的重点是发现如果你把它分成两个问题,“根据谓词对列表进行分区”和“定义谓词”会变得多么容易。跨度>