【发布时间】:2014-07-09 04:39:29
【问题描述】:
假设(list "apple" "orange" "apple" "grape" "orange")并产生(list (list 2 "apple") (list 2 "orange") (list 1 "grape"))。
最常见的水果将首先出现在生产的列表中。 在平局的情况下,按字母顺序将平局对与水果进行排序。
在本地使用map、filter、foldr、quicksort等抽象列表功能。没有递归。
如果没有递归,我不知道该怎么做。
我是这样写的:
(define (function list)
(cond
[(empty? list) empty]
[else
(local
(define (helper1 a b)
(cond
[(equal? a b) a]
[else b]))
(define T (foldr helper1 (first list) (rest list)))
(define (count a)
(cond
[(equal? a T) true]
[else false]))
(define new-list (quicksort (length (filter count list)) >))]
【问题讨论】:
-
到目前为止,您尝试了什么?请张贴代码
-
您意识到
map、filter和foldr在幕后为您执行循环(或递归),对吗?这就是你在没有(手动)递归的情况下如何做到的。 -
这里有一个关于如何解决这个问题的提示。首先,以某种方式实现
bagify。然后交换每个元素的顺序(因为bagify将项目放在第一位,计数放在第二位),然后对元素进行排序。 -
我刚刚发布了我的代码,问题是我只能获取一个元素,而不是全部,因为不允许递归。
标签: list sorting recursion scheme racket