我必须根据posn-x
的递增值进行排序(即(make-posn -1 2)
在(make-posn 1 2)
之前。如果posn-x
的值相同,那么我必须考虑posn-y
并执行相同操作。
一个期望的例子是
(check-expect (posn-sort (list (make-posn 2 6)
(make-posn -2 6)
(make-posn -2 -6)))
(list (make-posn -2 -6)
(make-posn -2 6)
(make-posn 2 6)))
感谢所有帮助,谢谢!
答案 0 :(得分:2)
您可以使用sort
过程,将位置列表和比较过程作为参数传递:
(define (posn-sort lst)
(sort lst compare-posn))
当然,诀窍是编写适当的比较器。它接收两个位置作为参数,分别为returns:
如果第一个小于(即应更早排序)第二个,则为真值。
对于您的情况,这意味着首先我们应该比较两个位置的x
值,如果该比较为false
,则我们比较y
值。该过程将自己写入:
(define (compare-posn p1 p2)
(or (< (posn-x p1) (posn-x p2))
(< (posn-y p1) (posn-y p2))))