zoukankan      html  css  js  c++  java
  • The differentiation program with abstract data


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


  • 相关阅读:
    原来这样就可以开发出一个百万量级的Android相机
    微信读书这样排版,看过的人都很难忘!
    AI小白快上车!这是发往高薪职位的车!
    短视频APP是如何开启你的美好生活的?
    自从我这样撸代码以后,公司网页的浏览量提高了107%!
    如果想成为一名顶尖的前端,这份书单你一定要收藏!
    老板今天问我为什么公司的数据库这么烂,我是这样回答的......
    MapReduce Notes
    HDFS Architecture Notes
    BloomFilter
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4007944.html
Copyright © 2011-2022 走看看