【问题标题】:Racket complex reduce function球拍复合减少功能
【发布时间】:2019-07-31 20:19:14
【问题描述】:

我正在尝试以一种比它通常的用途更复杂的方式使用 reduce 函数。我什至不确定这是否可能,但这是我正在尝试做的:

给定一个列表(1 2 3) 和两个常量,让它们分别是913,我尝试使用reduce 来结束:

(+ 1 (* 9 (+ 2 (* 9 (+ 3 (* 9 13))))))

我尝试了一种方法,将 13 添加到 then 列表的后面,所以我有 (1 2 3 13) 然后尝试使用 Lambda 和 reduce 进行一些映射,但我无法得到正确的答案。

我会发布我尝试过的代码,但是我的网络中断了,我正在手机上输入这个,很抱歉我无法展示我尝试做的事情,但目标是表达式的形式以上使用reduce

【问题讨论】:

    标签: functional-programming scheme lisp racket


    【解决方案1】:

    提议的操作确实可以实现为reduce(又名foldr):

    (+ 1 (* 9 (+ 2 (* 9 (+ 3 (* 9 13))))))
    => 9739
    
    (reduce (lambda (e acc) (+ e (* 9 acc)))
            13
            '(1 2 3))
    => 9739
    

    关于常量,13 在最里面的表达式中只使用一次,因此很适合用作初始值。 9 用于将累加值相乘。当递归开始展开时,输入列表从右到左使用,此时我们将当前元素添加到累积结果中。

    【讨论】:

    • 为了在开发过程中找到正确的形式,你可以试试(lambda (x acc) `(+ ,x (* 9 ,acc)))
    猜你喜欢
    • 2014-03-08
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多