我试图在另一个函数中调用我编写的反向函数(在单独调用时有效),但它输出的结果不正确。
我正在编写一个程序来获取关于x的二元多项式的导数。我有一个名为poly_derx的主函数,它将调用我的两个辅助函数reverse_list和mult_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 '()))
因此请注意,每次迭代都不能应用您希望执行一次的过程。它会给出意想不到的结果。