如何基于增加的posn-x值和posn-y值对posn排序?

时间:2019-03-14 04:28:37

标签: sorting insert scheme racket

我必须根据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)))

感谢所有帮助,谢谢!

1 个答案:

答案 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))))