zoukankan      html  css  js  c++  java
  • 【Scheme】序列的操作

    1.序列的表示

    序列

    序列(表)是由一个个序对组合而成的,具体来说就是让每个序对的car部分对应这个链的条目,cdr部分则是下一个序对。
    对于1->2->3->4这个序列我们可以表示为:

    (cons 1
          (cons 2
                (cons 3
                      (cons 4 null)))) 注:null代表表尾
    
    

    为了方便,上面的序列也可以通过(list 1 2 3 4)产生。

    表操作

    返回表中第n项:

    • n=0,返回表的char
    • n>0,返回表的cdr的第n-1项
    (define (list-ref items n)
      (if (= n 0)
          (car items)
          (list-ref (cdr items) (- n 1))))
    

    返回表长度:

    (define (length items)
      (if (null? items)
          0
          (+ 1 (length (cdr items)))))
    

    (define (length items)
      (define (length-iter items n)
        (if (null? items)
            n
            (length-iter (cdr items) (+ n 1))))
      (length-iter items 0))
    

    表的连接:

    • 如果list1是空表,结果就是list2
    • 否则先做出list1的cdr和list2的append,再将list1的car通过cons加到结果的前面。
    (define (append list1 list2)
      (if (null? list1)
          list2
          (cons (car list1) (append (cdr list1) list2))))
    

    表的反转:

    • 如果items为空表,返回null
    • 否则返回(cdr items)的反转与(car items)的连接,因将(car items)看做是表中的一个元素(无论其本身是否为表),故在连接时要将其再次构造为表。
    (define (reverse items)
      (if (null? items)
          null
          (append (reverse (cdr items)) (list (car items)))))
    

    对表的映射:

    (define (map proc items)
      (if (null? items)
          null
          (cons (proc (car items)) (map proc (cdr items)))))
    
  • 相关阅读:
    vue实现简单的点击切换颜色
    Controller层注解详解
    分布式数据库系统的透明性概念
    utf8和utf8mb64的关系
    数据库设计的四个阶段
    IDEA自定义启动图
    编译过程划分
    Linux 之 CentOS 7 安装Tomcat9
    Linux 之 CentOS 7 安装JDK1.8
    Linux 之 CentOS 7安装MySQL5.7
  • 原文地址:https://www.cnblogs.com/cknightx/p/6800267.html
Copyright © 2011-2022 走看看