guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: In search of cool Scheme


From: Harvey J. Stein
Subject: Re: In search of cool Scheme
Date: 24 May 2001 09:32:36 -0400

address@hidden (Harvey J. Stein) writes:

 > In scheme you just do something like (depending on your macro facility):
 > 
 > (define-macro (diff-fcn form . args)
 >    `(lambda args ,(differentiate form)))
 > 
 > Then you can do:
 > 
 > (define fprime (diff-fcn '(* x (sin x))) x u)

Full working example:

(define (diff f . vars)
  (cond ((number? f)
         0)
        ((memq f vars)
         1)
        ((eq? (car f) '+)
         `(+ ,(apply diff (cadr f) vars)
             ,(apply diff (caddr f) vars)))
        ((eq? (car f) '*)
         `(+ (* ,(cadr f) ,(apply diff (caddr f) vars))
             (* ,(apply diff (cadr f) vars) ,(caddr f))))))

(define-macro (diff-fcn form . args)
   `(lambda ,args ,(apply diff form args)))

guile> (diff '(* x x) 'x)
(+ (* x 1) (* 1 x))
guile> (define f (diff-fcn (* x x) x))
guile> f
#<procedure f (x)>
guile>  (f 0)
0
guile>  (f 1)
2
guile>  (f 2)
4

-- 
Harvey Stein
Bloomberg LP
address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]