【问题标题】:Recursive subtraction function递归减法函数
【发布时间】:2021-03-06 09:03:33
【问题描述】:

我正在尝试制作这个函数,它需要 2 个参数,双精度和双精度列表。 所以想法是从 Double 中减去所有列表值。

例子

为方便起见,我在此示例中使用整数。

这将打印 4

f = do
  let a = 10
  let b = [1,2,3]
  let c = f2 a b
  print c

这将减去列表中的第一个值,但如何做到这一点?

f2 0 _      = 0
f2 x []     = x
f2 x (y:ys) = x - y

这将减去数字 1,可能只是计算有多少个列表。

f3 0 _      = 0
f3 x []     = x
f3 x (y:ys) = x - f3 (x-y) ys

我已经尝试了很多不同的方法来让它工作,但我就是无法做到正确。 我知道有一些简单的方法可以做到这一点。

请帮忙!

【问题讨论】:

    标签: haskell


    【解决方案1】:

    你在列表上递归,每次都将减法的结果作为第一个参数传递:

    f2 :: Num a => a -> [a] -> a
    f2 x [] = x
    f2 x (y:ys) = f2 (x - y) ys

    但这里先将 sum :: Num a => [a] -> a 向上元素并从 x 中减去这些元素更简单:

    f2 :: Num a => a -> [a] -> a
    f2 x ys = x - sum ys

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-22
      • 2015-07-20
      • 2015-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多