为什么我的列表反向函数是独立工作的,而不是在另一个函数内部?
Why is my list reverse function working on its own, but not inside of another function?
我试图在另一个函数中调用我编写的反向函数(单独调用时有效),但它输出的结果不正确。
我正在编写一个程序来获取双变量多项式关于 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 '()))
因此请注意,您不能为每次迭代应用您希望发生一次的过程。它会带来意想不到的结果。
我试图在另一个函数中调用我编写的反向函数(单独调用时有效),但它输出的结果不正确。
我正在编写一个程序来获取双变量多项式关于 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 '()))
因此请注意,您不能为每次迭代应用您希望发生一次的过程。它会带来意想不到的结果。