为什么我的列表反向函数自己工作,而不是在另一个函数内部工作



我正在尝试在另一个函数中调用我编写的反向函数(单独调用时有效(,但它输出了不正确的结果。

我正在编写一个程序来获取二元多项式相对于 x 的导数。我有一个名为 poly_derx 的主函数,它将调用我的两个辅助函数 reverse_listmult_by_index

(define (mult_by_index list_1)
  (if (null? list_1)
      list_1
      (map * list_1 (range (length list_1)))))
(define (reverse_list list_1)
  (if (null? list_1)
      list_1
      (append(reverse (cdr list_1)) (list (car list_1)))))
(define (poly_derx list_1)
  (if (null? list_1)
      list_1
      (reverse_list(cons (mult_by_index (car list_1)) (poly_derx (cdr list_1))))))
(poly_derx `( (1) (1 2 3) () (3)))

同样,我的 3 个函数工作正常,直到我在poly_derx中添加reverse_list。另外,我知道有一个内置的反向,但我面临同样的问题。

在这一点上,我唯一知道要做的就是尝试在函数的不同点调用 reverse,但我知道什么都不起作用。

您的问题依赖于您在默认情况下reverse,并且从头到尾为每个子列表调用它。因此,(poly_derx '(1 2 3))变得(reverse_list (cons res1 (reverse_list (cons res2 (reverse_list res3 (reverse_list '())))))。您只需要反转最终结果。您可以使用帮助程序执行此操作:

(define (poly_derx list_1)
  (define (helper list_1)
    (if (null? list_1)
        list_1
        (cons (mult_by_index (car list_1)) (helper (cdr list_1)))))
  (reverse_list (helper list_1)))
此外,由于列表是从头到尾

创建的,并且从头到尾迭代,因此您可以使用它在帮助程序中反转列表。

(define (poly_derx list_1)
  (define (helper list_1 result)
    (if (null? list_1)
        result
        (helper (cdr list_1) (cons (mult_by_index (car list_1)) result))))
  (helper list_1 '()))

因此,请注意,您不能为每次迭代应用您希望发生一次的过程。它会给出意想不到的结果。

相关内容

  • 没有找到相关文章

最新更新