zoukankan      html  css  js  c++  java
  • 列表反转与深度反转

    列表反转的意思是将一个列表逆序过来,比如(list 1 2 3) -> (list 3 2 1)

    实现的时候最直接的想法是先将除了第一个元素意外的子表反转,然后将第一个元素接到后面去,但是在scheme中没有提供将一个元素append到某个list的结尾。

    因此使用头插入的办法,遍历要反转的表的第一个元素,用cons操作插入到结果的表的头部。

    (define (reverse-list ll)
      (define (reverse-list-iter r remain)
        (if (null? remain)
          r
          (reverse-list-iter (cons (car remain) r) (cdr remain))))
      (reverse-list-iter () ll))
    深度反转是表中每个元素的子表也要反转过来,比如(list (list 1 2) (list 3 4) 5) -> (list 5 (list 4 3) (list 2 1))实现的思路跟反转差不多,多了一个判断,当表的第一个元素是本身也是表的话递归进去反转之
    (define (deep-reverse-list ll)
      (define (deep-reverse-list-iter r remain)
        (cond ((null? remain) r)
              ((not (pair? (car remain)))
               (deep-reverse-list-iter (cons (car remain) r) (cdr remain)))
              (else (deep-reverse-list-iter (cons (deep-reverse-list-iter () (car remain)) r) (cdr remain)))))
      (deep-reverse-list-iter () ll))

  • 相关阅读:
    核心编程(第七章)
    核心编程答案(第六章)
    spring aop配置切点执行了两次的原因
    spring AOP使用 xml配置
    有关于时间戳的pgsql操作
    sql 中 limit 与 limit,offset连用
    学习大数据笔记day1
    Java实现各种排序
    关于java洗牌发牌小程序
    flex.css
  • 原文地址:https://www.cnblogs.com/mathlover/p/2685938.html
Copyright © 2011-2022 走看看