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


  • 相关阅读:
    通过注册表设置指定用户启动项的权限
    音频知识学习
    回老家也不忘老本......
    探索DOMNode
    表单填写示例(通过JavaScript访问DOM)
    最近的一些感悟
    C#和Java中的Substring()
    验证ASP.NET页生命周期时间的触发顺序
    解析c语言背后的汇编代码
    oracle nvl()函数在使用中出现的问题
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4007944.html
Copyright © 2011-2022 走看看