我试图让一个方案导数计算器更能接受输入,从求和过程开始,最终是乘积。我一直在尝试修改程序以接受形式的输入,(deriv '(* x y (+ x 3)) 'x)
而不是(deriv '(* x (* y (+ x 3))) 'x)
.
我正在处理的代码是:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SUM RELATED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;makes a sum structure
(define (make-sum a1 a2)
(list '+ a1 a2))
;checks if something is a sum structure
(define (sum? x)
(and (pair? x)
(eq? (car x) '+)))
;get first term of sum
(define (addend s)
(cadr s))
;get second term of sum
(define (augend s)
(caddr s))
和
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;PRODUCT RELATED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;make a product structure
(define (make-product m1 m2)
(list '* m1 m2))
;checks if something is a product structure
(define (product? x)
(and (pair? x)
(eq? (car x) '*)))
;get first factor of product
(define (multiplier p)
(cadr p))
;get second factor of product
(define (multiplicand p)
(caddr p))
我试图解决这个问题,但到目前为止没有太多的运气,这是我试图在几个不同的变体中实现的:
;makes a sum structure
(define (make-sum a1 a2)
(if (sum? a1)
(if (sum? a2)
(cons '+ (append (cdr a1) (cdr a2)))
(cons '+ (append (cdr a1) (list a2)))
(cons '+ (append (list a1) (cdr a2)))))
(list '+ a1 a2))
它给了我一个糟糕的语法调用。而且我可以看到我的第二个 if 似乎真的不适合 if 语句,但是我的老师给了我假设它的外观结构,所以它让我感到困惑,它不起作用,或者假设我想工作。
如果有人能帮我理解这一点,那就太好了。
到目前为止,我对 Scheme 并不感兴趣,虽然知道或理解它似乎很酷,但我的老师在过去 2 周内试图适应它,但我无法掌握它。