按方案中的第一个元素对列表列表进行排序

标签 sorting scheme r5rs

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

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

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

mcar: contract violation
  expected: mpair?
  given: 4

有人可以更正我的代码并解释一下吗?谢谢

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

最佳答案

怎么样(sort (lambda (x y)(< (car x)(car y))) <YOUR_LIST>)

关于按方案中的第一个元素对列表列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40056854/

相关文章:

recursion - 为什么在传递否定参数时我的代码会卡在递归调用中?

algorithm - 方案中的后序遍历

documentation - 是否有 Scheme 的官方文档标准?

c - 颠倒c中的字节顺序

linux - 当输入通过管道或重定向到它时,sort/uniq 命令的内部工作

lisp - 我可以使用什么 Racket 函数将值插入列表中的任意位置?

scheme - 程序带括号和不带括号的区别?

javascript - 根据一个属性的自定义优先级对数组进行排序

java - 比较按升序和降序排列使用 2 个属性

sorting - 在交换过程中无法获得我想要的最终列表