#!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. Hibernate根据配置文件,生成建表语句

    import org.hibernate.cfg.Configuration; import org.hibernate.tool.hbm2ddl.SchemaExport; public class ...

  2. POJ 3159 Candies(差分约束+spfa+链式前向星)

    题目链接:http://poj.org/problem?id=3159 题目大意:给n个人派糖果,给出m组数据,每组数据包含A,B,C三个数,意思是A的糖果数比B少的个数不多于C,即B的糖果数 - A ...

  3. 洛谷 P1897电梯里的爱情 题解

    题目传送门 对于每个输入的第i个人,直接使用桶,但注意范围要开大一些. #include<bits/stdc++.h> using namespace std; ],x,sum,h,Max ...

  4. MYSQL-----IFNULL()函数的用法

    Mysql查询中可以使用IFNULL()函数,IFNULL函数中有两个参数,它的作用是测试如果ifnull第一个参数不为null,就会显示出查询的结果,如果第一个参数为null,则会返回第二个参数的字 ...

  5. lr11_Run-time Settings选项介绍:

    lr11_Run-time Settings选项介绍: ●Run Logic ●Pacing ●Log 下面对每个

  6. 长沙理工大学第十二届ACM大赛-重现赛 G - 跑路ing

    题目描述 vigoss18 辞职成功终于逃出了公司,但是没过太久,公司就发现vigoss18 的所作所为,于是派人来把他抓 回去. vigoss18 必须一直跑路,躲避公司的围捕.可以抽象的看成一个有 ...

  7. brpc初探

    因为最近在看一个内部开源代码,看到了braft.braft又依赖于brpc.于是就看了相关的文档,打算接下来试一把. 这里引用下gejun大佬在知乎上的回答(https://www.zhihu.com ...

  8. iOS 9音频应用播放音频之控制播放速度

    iOS 9音频应用播放音频之控制播放速度 iOS 9音频控制播放速度 iOS9音频文件在播放时是以一定的速度进行的.这个速度是可以进行更改的,从而实现iOS9音频文件的快速播放和慢速播放功能.要实现i ...

  9. Redis学习篇(十)之排序

    SORT 按照键值从小到大或者从大到小的顺序进行排序 对数字进行排序 语法:SORT key [DESC] 默认情况下,是升序排序,可以指定DESC进行降序排序 对字母进行排序 语法:SORT key ...

  10. 【BZOJ 1221】 1221: [HNOI2001] 软件开发 (最小费用流)

    1221: [HNOI2001] 软件开发 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1581  Solved: 891 Description ...