#!r6rs

( import ( rnrs base ( 6 ) )

         ( rnrs io simple ( 6 ) ) )





( define ( deriv exp var )

   ( define ( variable? x )

      ( symbol? x ) )

   

   ( define ( =number? exp num )

      ( and ( number? exp )

            ( = exp num ) ) )

   

   ( define ( same-variable? x1 x2 )

      ( and ( variable? x1 )

            ( variable? x2 )

            ( eq? x1 x2 ) ) )

   

   ( define ( make-sum a1 a2 )

      ( cond ( ( =number? a1 0 )

               a2 )

             ( ( =number? a2 0 )

               a1 )

             ( ( and ( number? a1 )

                     ( number? a2 ) )

               ( + a1 a2 ) )

             ( else 

               ( list '+ a1 a2 ) ) ) )

   

   ( define ( make-product m1 m2 )

      ( cond ( ( or ( =number? m1 0 )

                    ( =number? m2 0 ) ) 

               0 )

             ( ( =number? m1 1 ) 

               m2 )

             ( ( =number? m2 1 )

               m1 )

             ( ( and ( number? m1 )

                     ( number? m2 ) ) 

               ( * m1 m2 ) )

             ( else

               ( list '* m1 m2 ) ) ) )

   

   ( define ( sum? x )

      ( and ( pair? x )

            ( eq? ( car x ) '+ ) ) )

   

   ( define ( addend s )

      ( cadr s ) )

   

   ( define ( augend s )

      ( caddr s ) )

   

   ( define ( product? x )

      ( and ( pair? x )

            ( eq? ( car x ) '* ) ) )

   

   ( define ( multiplier p )

      ( cadr p ) )

   

   ( define ( multiplicand p )

      ( caddr p ) )

   

   ( cond ( ( number? exp ) 0 )

          ( ( variable? exp )

            ( if ( same-variable? exp var ) 1

                 0 ) )

          ( ( sum? exp )

            ( make-sum ( deriv ( addend exp ) var )

                       ( deriv ( augend exp ) var ) ) )

          ( ( product? exp )

            ( make-sum ( make-product ( multiplier exp )

                                      ( deriv ( multiplicand exp ) var ) )

                       ( make-product ( deriv ( multiplier exp ) var )

                                      ( multiplicand exp ) ) ) )

          ( else 

            ( error "unknown expression type: DERIV" exp ) ) ) )



The differentiation program with abstract data的更多相关文章

  1. ADT(abstract data types)抽象数据类型

    1.What is it? An abstract data type is a set of objects together with a set of operations. 抽象数据类型是带有 ...

  2. 20182320《Program Design and Data Structures》Learning Summary Week9

    20182320<Program Design and Data Structures>Learning Summary Week9 1.Summary of Textbook's Con ...

  3. Rocket - debug - TLDebugModuleInner - Abstract Data

    https://mp.weixin.qq.com/s/DOLkEi-_qQt6lWOhJ2hxVQ 简单介绍TLDebugModuleInner中抽象数据寄存器的实现. 1. abstractData ...

  4. STM8S——Flash program memory and data EEPROM

    1.简介 STM8S内部的FLASH程序存储器和数据EEPROM是由一组通用寄存器来控制的:所以我们可以通过这些通用寄存器来编程或擦除存储器的内容.设置写保护.或者配置特定的低功耗模式.我们也可以自己 ...

  5. Abstract Data Types in C

    Interface declares operations, not data structure Implementation is hidden from client (encapsulatio ...

  6. Abstract Data Type

  7. 20162314 《Program Design & Data Structures》Learning Summary Of The Fifth Week

    20162314 2017-2018-1 <Program Design & Data Structures>Learning Summary Of The Fifth Week ...

  8. detect data races The cost of race detection varies by program, but for a typical program, memory usage may increase by 5-10x and execution time by 2-20x.

    小结: 1. conflicting access 2.性能危害 优化 The cost of race detection varies by program, but for a typical ...

  9. Core Java Volume I — 3.3. Data Types

    3.3. Data TypesJava is a strongly typed language(强类型语音). This means that every variable must have a ...

随机推荐

  1. MYSQL三种安装方式--二进制包安装

    1. 把二进制包下载到/usr/local/src下 2. 如果是tar.gz包,则使用tar zxvf 进行解压 如果是tar包,则可以使用tar xvf 进行解压 3. $ mv mysql-5. ...

  2. Lynx以纯文本的形式下载网页

    Lynx是一款基于命令行的web浏览器 [root@test88 ~]# yum install lynx -y [root@test88 ~]# lynx www.baidu.com 以纯文本的形式 ...

  3. yolo回归型的物体检测

    本弱又搬了另外一个博客的讲解: 缩进YOLO全称You Only Look Once: Unified, Real-Time Object Detection,是在CVPR2016提出的一种目标检测算 ...

  4. leetcode 168. Excel Sheet Column Title 171 Excel Sheet Column Number

    题目 //像10进制一样进行 转换   只是要从0开始记录 class Solution { public: string convertToTitle(int n) { char a; string ...

  5. HDU 4614 Vases and Flowers(线段树+记录区间始末点或乱搞)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4614 题目大意:有n个空花瓶,有两种操作: 操作①:给出两个数字A,B,表示从第A个花瓶开始插花,插B ...

  6. python基础(9)--递归、二叉算法、多维数组、正则表达式

    1.递归 在函数内部,可以调其他函数,如果一个函数在内部调用它本身,这个函数就是递归函数.递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于裂解 递归算法解决问题的特点: 1)递归是 ...

  7. jquery.query.js 插件(示例及简单应用) —— html之间传值

    帮助文档 var url = location.search; > "?action=view&section=info&id=123&debug&te ...

  8. Hive2.x 版本的安装及配置 以及要注意的事项

    博主学习Hadoop学习到Hive,一开始跟着资料去安装Hive 1.x一点问题也没有,方便快捷啊,但是看了一下官方文档,上面好像说Hive 2.0修复了很多bug,那么我想,我还是用Hive2.0好 ...

  9. 【LOJ】#2351. 「JOI 2017/2018 决赛」毒蛇越狱

    题解 没啥特别好的算法,是个讨论题,由于0 1 ?三类数位中最少的不会超过6 如果1不超过6,那么记录\(f1(S)\)为 \(\sum_{T \subset S} val(T)\)这个可以通过类似F ...

  10. Python并发编程-进程间数据共享

    Manager中进程数据不安全 通过加锁解决 from multiprocessing import Manager,Process,Lock def main(dic,lock): lock.acq ...