It is impossible to rewrite the code from Lisp language to Scheme language, an error occurs, help to correct.
For example (cadr x) is equivalent to (car (cdr x))
a function (cadr x) is equivalent to (car (cdr x)), and I don't know how to interpret the numberp function.
Lisp code:
(defun deriv (f x)
(cond ((numberp f) 0)
((eq f x) 1)
((eq (car f) '+) `(+ ,(deriv (cadr f) x) ,(deriv (caddr f) x)))
((eq (car f) '-) `(- ,(deriv (cadr f) x) ,(deriv (caddr f) x)))
((eq (car f) '*) `(+ (* ,(caddr f) ,(deriv (cadr f) x)) (* ,(cadr f) ,(deriv (caddr f) x))))
((eq (car f) '^) `(* (* ,(caddr f) (^ ,(cadr f) (- ,(caddr f) 1))) ,(deriv (cadr f) x)))))
How I tried to write this code on Scheme:
(define deriv (f x)
(cond
((eq? f x) 1)
((eq? (car f) '+) '(+ ,(deriv (car (cdr f) x)) ,(deriv (car (cdr (cdr f) x)))))
((eq? (car f) '-) '(- ,(deriv (car (cdr f) x)) ,(deriv (car (cdr (cdr f) x)))))
((eq? (car f) '*) '(+ (* ,(car (cdr (cdr f))) ,(deriv (car (cdr f) x))) (* ,(car (cdr f)) ,(deriv (car (cdr (cdr f) x))))))
((eq? (car f) '^) '(* (* ,(car (cdr (cdr f))) (^ ,(car (cdr f)) (- ,(car (cdr (cdr f))) 1))) ,(deriv (car (cdr f)) x)))))
an error occurs
define: bad syntax (multiple expressions after identifier) in: (define deriv (f x) (cond ((eq? f x) 1) ((eq? (car f) (quote +)) (quote (+ (unquote (deriv (car (cdr f) x))) (unquote (deriv (car (cdr (cdr f) x))))))) ((eq? (car f) (quote -)) (quote (- (unquote (deriv (car (cdr f) x))) (unquote (deriv (car (cdr (cdr f) x))))))) ((eq? (car f) (quote *)) (quote (+ (* (unquote (car (cdr (cdr f)))) (unquote (deriv (car (cdr f) x)))) (* (unquote (car (cdr f))) (unquote (deriv (car (cdr (cdr f) x)))))))) ((eq? (car f) (quote ^)) (quote (* (* (unquote (car (cdr (cdr f)))) (^ (unquote (car (cdr f))) (- (unquote (car (cdr (cdr f)))) 1))) (unquote (deriv (car (cdr f)) x)))))))
p.s. Sorry for my English
#lang) are you using?#lang rackethascadr, has it not?