从列表中添加方案的方案

库玛

我正在编写一个用于对多项式执行运算的计划程序。我目前正在研究一种结合所有相似术语的方法。例如,如果我有多项式:1x ^ 2 + 2x ^ 2 + 4x ^ 3,则该函数应组合相似项1x ^ 2和2x ^ 2并输出最终多项式3x ^ 2 + 4x ^ 3。它使用递归。

我首先对多项式进行排序。然后,如果长度为零,则什么也不做。我调用了另一个函数,该函数检查指数是否相等,如果相等,则将两个项相加,然后遍历列表。

我遇到的问题是:

当我检查两个条件是否相等时,将它们加在一起。一旦执行完此操作,就无法确定如何在进行递归调用时将其添加到原始列表并传递该列表。我知道我应该使用“缺点”添加到列表的前面。我知道我应该使用cdr(cdr list)来跳过已经添加的两个术语。

如何在函数内创建新列表以添加到原始列表?到目前为止,这是我所做的。其中一些无效。(正在尝试不同的东西)我停留的部分是当我创建'a'和'b'并打印它们时。我不想打印它们,而是希望将它们放在列表中,以便可以将其与原始列表结合使用。到目前为止,我尝试了在注释部分加上中间的“缺点”(分号)。这就是我的列表的定义方式。第一项是系数,第二项是指数。示例:(2 3)Coeff = 2,expon = 3

    (define p1 '((2 3)(3 2)(5 2)))

    (define (simplify p)
    (sort p GT)
    (cond [(= (length p) 0) (print 0)]
    [(= (length p) 1) (printpoly p)]
    [
     (if(EQExp? (car p) (cadr p))
     (let([a (+ (coeff (car p)) (coeff (cadr p)))])
     (let([b (expon (cadr p))])
     (print a)
     (display "x^")
     (print b)
       (printpoly(car([list '((a b))])))
     ; (printpoly y)
     ; (cons (cons ('(a) '(expon (cdr p)))) p)
     ; (cons  y p)
     ;(print (expon (car p)))
     (set! p (cdr p))
     (simplify p)
         )
       ;)
     )
     (if(> (length p) 1)
      ((printTerm (car p))
      (display " + ")
      (set! p (cdr p))
      (simplify p))
      ((=(length p) 1)
       (set! p (cdr p))
       (simplify p)
      )
      )
     )
     ]
     [else
     (set! p (cdr p))
     (simplify p)
     ]
     )
     )
苏加德

多项式运算可能很复杂,因此将任务分解为许多小运算很重要。特别是,您需要一个单独的函数来打印多项式。在下面,您将看到简化如何用相同的指数替换两个术语。缺少的是用于打印多项式的函数。

(define the-zero-polynomial '())

(define (exponent t) ; t stands for term
  (second t))

(define (coef t) ; t 
  (first t))

(define (same-degree? t1 t2)
  (or (equal? t1 t2)
      (and (not (null? t1)) (not (null? t2))
           (= (exponent t1) (exponent t2)))))

(define p1 '((2 3) (3 2) (5 2)))

(define (simplify p) ; p is unsorted
  (simplify-sorted (sort p GT)))

(define (simplify-sorted p)
  (cond 
    [(= (length p) 0) the-zero-polynomial]
    [(= (length p) 1) p]
    [else
     ; now p = (list t1 t2 t ...)
     (let ([t1 (first p)] [t2 (second p)])
       (cond
         [(same-degree? t1 t2)
          ; same degree, replace (list t1 t2 t ...) 
          ; with                 (list t1+t2 t ...)
           (let ([t1+t2 (list (+ (coef t1) (coef t2))
                              (exponent t1))])
             (simplify-sorted (cons t1+t2 (cddr p))))]
         [else
          (cons t1 (simplify (cdr p)))]))]))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从列表中添加方案的方案

来自分类Dev

在方案中添加嵌套列表的总和

来自分类Dev

列表方案中的位置

来自分类Dev

从方案列表中打印对

来自分类Dev

方案中的列表列表

来自分类Dev

在方案中递归创建列表

来自分类Dev

列表中的方案重复项

来自分类Dev

在方案中查找配对列表

来自分类Dev

在方案列表中定义“减少”

来自分类Dev

在方案中反向链接列表

来自分类Dev

列表中数字的方案总和

来自分类Dev

如何在PyCharm中添加配色方案?

来自分类Dev

在方案列表中检测到#<unspecified>

来自分类Dev

删除列表中的空白元素(方案)

来自分类Dev

使用方案更改列表中的元素

来自分类Dev

复制方案列表中的给定元素

来自分类Dev

将配色方案 JSON 列表添加到 Angular 8 环境中的 Scss 文件

来自分类Dev

方案-递归地将值添加到列表

来自分类Dev

方案反向列表

来自分类Dev

方案模式“列表”功能

来自分类Dev

方案:返回正值列表

来自分类Dev

方案列表操作错误

来自分类Dev

方案功能列表-如何访问列表中的功能?

来自分类Dev

方案:在列表和子列表中搜索元素

来自分类Dev

方案中要列出的缺点元素与方案中要列出的缺点列表

来自分类Dev

Visual Studio - EnvDTE.DTE.Solution.Open 不会将解决方案/项目添加到最近的列表中

来自分类Dev

将项目添加到方案中的队列中

来自分类Dev

在方案中处理可变数据中的列表

来自分类Dev

如何在emacs中添加缩进方案(REPL)?