本文介绍了按方案中的第一个元素对列表进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在按列表的第一个元素对列表进行排序,例如
(排序 (列表 '(2 1 6 7) '(4 3 1 2 4 5) '(1 1))))

I'm working on sorting a list of lists by their first element for example
(sort (list '(2 1 6 7) '(4 3 1 2 4 5) '(1 1))))

预期输出 => ('(1 1) '(2 1 6 7) '(4 3 1 2 4 5))

expected output => ('(1 1) '(2 1 6 7) '(4 3 1 2 4 5))

我使用的算法是冒泡排序.我修改了它来处理列表.但是,代码无法编译.错误是

The algorithm I used is bubble sort. And I modified it to deal with lists. However, the code doesn't compile. The error is

mcar: contract violation
  expected: mpair?
  given: 4

谁能更正我的代码并解释一下.谢谢

Can someone correct my code and explain it. Thank you

 (define (bubble L)
        (if (null? (cdr L))
            L
            (if (< (car (car L)) (car (cadr L)))
                (list (car L)
                      (bubble (car (cdr L))))
                (list (cadr L)
                      (bubble (cons (car (car L)) (car (cddr L))))))))

    (define (bubble-sort N L)
        (cond ((= N 1) (bubble L))
              (else
               (bubble-sort (- N 1) (bubble L)))))

    (define (bubble-set-up L)
        (bubble-sort (length L) L))


    (define t3 (list '(2 1 6 7) '(4 3 1 2 4 5) '(1 2 3) '(1 1)))
    (bubble-set-up t3)

推荐答案

我修正了一些错误.至少还剩下一个错误.考虑 L 只包含一个元素的情况.

I have fixed a few mistakes. There is at least one mistake left.Consider the case where L only contains one element.

#lang r5rs

(define (bubble L)
  (if (null? (cdr L))
      L
      (if (< (car (car L)) (car (cadr L)))
          (cons (car L)
                (bubble (cdr L)))
          (cons (cadr L)
                (bubble (cons (car L) (cddr L)))))))

(define (bubble-sort N L)
  (cond ((= N 1) (bubble L))
        (else
         (bubble-sort (- N 1) (bubble L)))))

(define (bubble-set-up L)
  (bubble-sort (length L) L))


(define t3 (list '(2 1 6 7) '(4 3 1 2 4 5) '(1 2 3) '(1 1)))
(display (bubble-set-up t3))
(newline)

这篇关于按方案中的第一个元素对列表进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-18 17:02