私は、合計手順から始めて、最終的に積まで、スキームデリバティブ計算機が入力をより受け入れられるようにしようとしています。(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))
それは私に悪い構文呼び出しを与えています。そして、私の 2 番目の if は実際には if ステートメントに適合していないように見えますが、それがどのように見えるかの構造は先生から与えられたので、それが機能しないか、または想定されていると混乱します。仕事に行くと思います。
誰かがこれを理解する手を貸してくれるなら、それは素晴らしいことです.
私はこれまでのところ、Scheme にあまり熱中していません。知ったり理解したりするのはクールなことのように思えますが、私の先生はこの 2 週間でそれに合わせようとしていて、私はそれを理解することができません。