我需要创建一个方案代码,使我能够计算多项式的阶数并将其显示出来,方案中是否有一个特殊的函数可以处理这些多项式?
pd:提出这类问题的方法是什么?
答案 0 :(得分:1)
没有这样的功能,就像标准库中的游戏中没有枪支的功能一样。多项式甚至没有一个数据结构。
与所有用户定义的扩展一样,您可以根据需要对数据进行建模,并且可以创建一个接口以使用该数据。这是您扩展语言以支持您要播放的数据的方式。
;; this is not part of the interface
(define tag-point (list 'point))
;; these are the interface
(define (point x y)
(list tag-point x y))
(define point-x cadr)
(define point-y caddr)
(define (point? p)
(and (pair? p)
(eq? (car p) tag-point)))
;; implemented distance that uses the interface
(define (distance p1 p2)
;; (assert (and (point? p1) (point? p2)))
(sqrt (+ (square (- (point-x p1) (point-x p2)))
(square (- (point-y p1) (point-y p2))))))
(distance (point 3 0 ) (point 0 4)) ; ==> 5
现在,只要接口保持完整,您就可以更改数据结构:
;; implement points using complex numbers
(define (point x y) (make-rectangular x y))
(define (point-x p) (real-part p))
(define (point-y p) (imag-part p))
(define (point? p) (complex? p))
一个人可以做(define point make-rectangular)
,但是接口文档会很模糊。
我记得在SICP videos中,他们做了多项式类型。在part 4B中。它的解释与我在此处所做的解释几乎相同,它们实际上将多项式实现为您可以对其进行算术运算的类型。因此,它可能不是您想要的,但是它们的数据结构可以使您有所了解。