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

  • 相关阅读:
    Cheat Engine 创建线程
    Cheat Engine 人造指针
    Cheat Engine 特征码
    Cheat Engine 自动注入
    Cheat Engine 作弊表框架代码
    Cheat Engine 修改汇编指令
    Shell 选择排序
    Shell 冒泡排序
    Selenium API常用方法
    Selenium数据驱动
  • 原文地址:https://www.cnblogs.com/mathlover/p/2685938.html
Copyright © 2011-2022 走看看