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

  • 相关阅读:
    Elasticsearch-PHP 索引操作2
    Elasticsearch-PHP 索引操作
    Linux系统编程1_C标准函数库和系统调用
    Git命令_git commit
    Git命令_git log
    Linux27_配置samba
    计算机网络12_整理
    理解操作系统8——字符设备与块设备
    网站开发基础知识3_会话和cookie
    网站开发基础知识2_前后端分离
  • 原文地址:https://www.cnblogs.com/mathlover/p/2685938.html
Copyright © 2011-2022 走看看