如何计算方案中多项式的阶数?

时间:2018-08-02 01:24:59

标签: scheme

我需要创建一个方案代码,使我能够计算多项式的阶数并将其显示出来,方案中是否有一个特殊的函数可以处理这些多项式?

pd:提出这类问题的方法是什么?

1 个答案:

答案 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中。它的解释与我在此处所做的解释几乎相同,它们实际上将多项式实现为您可以对其进行算术运算的类型。因此,它可能不是您想要的,但是它们的数据结构可以使您有所了解。