【问题标题】:Haskell: Function multiplying elements of list using high order functionsHaskell:使用高阶函数将列表元素相乘的函数
【发布时间】:2015-02-17 10:41:21
【问题描述】:

我是 Haskell 的新手,所以我试图了解高阶函数以及它们如何使用 map、filter、foldr、foldl、foldr1、foldl1 和 operator 工作。

首先我想从一个函数开始,该函数将列表中的元素相乘,然后将一个空列表相乘返回 1。

到目前为止,我有这个,但我不确定下一步该去哪里。

mult :: [Int] -> Int

【问题讨论】:

    标签: haskell


    【解决方案1】:

    首先从显式递归开始...这意味着不要使用 foldl/foldr 和朋友。

    让我们从处理空列表的极端情况开始:

    mult [] = 1
    

    现在,我们可以对列表的第一个元素做一些事情:

    mult (x:xs) = x * 3
    

    x 是列表的第一个元素,而xs 是剩余的列表。所以这只是将列表的 first 元素乘以 3。 现在你必须弄清楚用什么替换 3 才能让整个事情做你想做的事。其余的已经正确,如:

    mult :: [Int] -> Int
    mult [] = 1
    mult (x:xs) = x * <this part is missing, recursion maybe?>
    

    【讨论】:

      【解决方案2】:

      你应该处理空列表的情况:

      mult [] = ?
      

      那么,你想做什么?你想基本上列出一个清单:

      [1, 2, 3, 4]
      

      并在其间插入乘号:

      1 * 2 * 3 * 4
      

      我建议您查看how fold works

      【讨论】:

      • 基本上我只是想将一个包含 3 个数字的列表相乘,那么该代码最终会是什么样子?
      • @Mochilla:好的。那么你为? 放了什么?
      • 下面我有一个测试可以做到这一点' te "mult" 5 (multiply [1, 2, 3])'
      • @Mochilla:我的意思是填空。 ? 应该是什么?
      • 应该是1?那我可以mult xs = foldl (*) xs?
      猜你喜欢
      • 1970-01-01
      • 2020-05-21
      • 2017-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多