Functional programming 为什么我的列表反转函数是独立工作的,而不是在另一个函数中?

Functional programming 为什么我的列表反转函数是独立工作的,而不是在另一个函数中?,functional-programming,scheme,racket,procedural-programming,Functional Programming,Scheme,Racket,Procedural Programming,我试图调用我编写的一个反向函数,当在另一个函数中单独调用时,该函数可以工作,但它会输出错误的结果 我在写一个程序,求二元多项式对x的导数。我有一个名为poly_derx的主函数,它将调用我的两个助手函数reverse_list和mult_by_index 同样,我的3个函数工作正常,直到我在poly_derx中添加reverse_列表。此外,我知道有一个内置的反向,但我面临着同样的问题 此时,我知道要做的唯一一件事就是尝试在函数中的不同点调用reverse,但我所知的一切都不起作用。您的问题在于

我试图调用我编写的一个反向函数,当在另一个函数中单独调用时,该函数可以工作,但它会输出错误的结果

我在写一个程序,求二元多项式对x的导数。我有一个名为poly_derx的主函数,它将调用我的两个助手函数reverse_list和mult_by_index

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


此时,我知道要做的唯一一件事就是尝试在函数中的不同点调用reverse,但我所知的一切都不起作用。

您的问题在于,您在默认情况下进行了反向操作,并且从头到尾为每个子列表调用它。因此,poly_derx'1 2 3变为反向_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 '()))

所以请注意,您不能为每个迭代应用您希望发生一次的过程。它将产生意想不到的结果

您的问题在于,您在默认情况下进行了反向操作,并且从头到尾为每个子列表调用它。因此,poly_derx'1 2 3变为反向_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 '()))

所以请注意,您不能为每个迭代应用您希望发生一次的过程。它将产生意想不到的结果

显示不工作的代码。也许考虑采用你正在学习的语言的习惯,而不是从其他方面带来风格/习惯。languages@Sylwester这是不起作用的代码啊。我想你的意思是,当你将定义从一个全局过程移动到poly_derx的本地过程时,它就停止工作了。请不要通过破坏你的帖子为其他人做更多的工作。通过在堆栈溢出上发布,您已经在for SO下授予了分发该内容的不可撤销的权利。根据SO政策,任何故意破坏行为都将恢复原状。如果你想知道更多关于删除一篇文章,请阅读更多的代码显示不工作。也许考虑采用你正在学习的语言的习惯,而不是从其他人带来风格/习惯。languages@Sylwester这是不起作用的代码啊。我想你的意思是,当你将定义从一个全局过程移动到poly_derx的本地过程时,它就停止工作了。请不要通过破坏你的帖子为其他人做更多的工作。通过在堆栈溢出上发布,您已经在for SO下授予了分发该内容的不可撤销的权利。根据SO政策,任何故意破坏行为都将恢复原状。如果您想了解有关删除帖子的更多信息,请阅读更多信息,我认为在其参数中的函数完成之前,它不会调用反转。@BobDole它不区分调用自己还是调用其他对象。if-then或else表达式中的所有内容都已完全完成。因此,我认为在其参数中的函数完成之前,它不会调用反转。@BobDole它不会区分调用自己还是调用其他对象。if-then或else表达式中的所有内容都已完全完成。