Sorting 如何在增加posn-x值和posn-y值的基础上订购posn? 我必须根据 POSN x的值排序(IE.(使POSN - 1 2)出现在(POSN 1 2)< /C> >,如果 POSN-X/COD>值相同,那么我必须考虑 POSN Y并做同样的操作。

Sorting 如何在增加posn-x值和posn-y值的基础上订购posn? 我必须根据 POSN x的值排序(IE.(使POSN - 1 2)出现在(POSN 1 2)< /C> >,如果 POSN-X/COD>值相同,那么我必须考虑 POSN Y并做同样的操作。,sorting,insert,scheme,racket,Sorting,Insert,Scheme,Racket,预期的示例如下: (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

预期的示例如下:

(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)))

非常感谢您的帮助!

您可以使用
排序程序,将位置列表和比较器程序作为参数传递:

(define (posn-sort lst)
  (sort lst compare-posn))
当然,诀窍是编写一个适当的比较器。它接收两个位置作为参数,并且:

如果第一个小于第二个(即排序应早于第二个),则为真值

对于您的情况,这意味着首先我们应该比较两个位置的
x
值,如果该比较为
false
,则我们比较
y
值。该过程本身编写:

(define (compare-posn p1 p2)
  (or (< (posn-x p1) (posn-x p2))
      (< (posn-y p1) (posn-y p2))))
(定义(比较位置p1 p2)
(或(<(位置N-x p1)(位置N-x p2))
(<(位置N-y p1)(位置N-y p2)))

您可以使用
排序程序,将位置列表和比较器程序作为参数传递:

(define (posn-sort lst)
  (sort lst compare-posn))
当然,诀窍是编写一个适当的比较器。它接收两个位置作为参数,并且:

如果第一个小于第二个(即排序应早于第二个),则为真值

对于您的情况,这意味着首先我们应该比较两个位置的
x
值,如果该比较为
false
,则我们比较
y
值。该过程本身编写:

(define (compare-posn p1 p2)
  (or (< (posn-x p1) (posn-x p2))
      (< (posn-y p1) (posn-y p2))))
(定义(比较位置p1 p2)
(或(<(位置N-x p1)(位置N-x p2))
(<(位置N-y p1)(位置N-y p2)))

hi@macy,你自己尝试过什么吗?你能告诉我们你的尝试,并解释一下你在哪里/什么地方遇到了麻烦吗?事实上,我之前已经展示了我所有的工作,如果你点击编辑,我以前键入的所有内容都会在那里。问题还有很多,但这是我唯一需要帮助的部分。hi@macy,你尝试过一个你自己做什么?你能告诉我们你的尝试,并解释你在哪里/什么地方遇到了麻烦吗?事实上,我之前已经展示了我所有的工作,如果你点击编辑,我以前键入的所有内容都会在那里。问题还有很多,但这是我唯一需要帮助的部分。@macy这篇文章解决了你的问题吗?如果是这样的话,请不要忘记,只需单击其左侧的复选标记;)。也值得一读:@macy这篇文章解决了你的问题吗?如果是这种情况,请不要忘记,只需单击其左侧的复选标记;)。也值得一读:。