【发布时间】:2014-03-17 00:20:51
【问题描述】:
方案中
我正在尝试编写一段代码来对子列表列表进行排序,使用每个子列表的 to 元素之间的差异。我的意思是:
即,
子列表列表:'('(ted 10 4) '(barbie 10 5) '(car 10 7) '(ball 10 6))
我想根据每个子列表的第二个和第三个元素之间的差异对列表进行排序,因此排序后的列表应该看起来像升序(从低到高):
'('(汽车 10 7) '(球 10 6) '(芭比娃娃 10 5) '(泰迪 10 4))
我已经为子列表创建了访问器:
(define (access-name x) (car x))
(define (access-aquprice x)(cadr x))
(define (access-saleprice x)(caddr x))
排序循环让我很困惑,请帮忙! :)
到目前为止,我只有:
(define (sortlist curr)
(if (null? curr)
(curr)
(if (>
(diff (access-aquprice (car toylist)) (access-saleprice (car toylist)))
(diff (access-aquprice (cadr toylist)) (access-saleprice (cadr toylist))))
("hello")
"goodbye")))
【问题讨论】:
-
您可以使用内置的
sort过程还是应该从头开始实现它? -
我必须从头开始
-
我需要创建一个新的排序列表。到目前为止,我只有:
(define (sortlist curr) (if (null? curr)(curr) (if (> (diff (access-aquprice (car toylist))(access-saleprice (car toylist))) (diff (access-aquprice (cadr toylist)) (access-saleprice (cadr toylist)))) ("hello") "goodbye") ) ) -
在没有先验知识的情况下从头开始编写排序算法并不是那么简单,特别是如果您刚刚开始学习基础知识。最好阅读一些关于排序算法的内容。恕我直言,快速排序或合并排序在 Scheme 中很容易实现,请以研究它们为起点。
标签: list sorting loops recursion scheme