【发布时间】:2021-12-23 07:10:59
【问题描述】:
我正在尝试通过找出一些代码来学习 Haskell 编程语言。
我有这两个小功能,但我不知道如何在 ghci 上测试它们。 调用这些函数时应该使用哪些参数?
total :: (Integer -> Integer) -> Integer -> Integer
total function count = foldr(\x count -> function x + count) 0 [0..count]
上面的函数应该对于给定的值n,返回f 0 + f 1 + ... + f n。
但是,在调用该函数时,我不明白在 f 部分中放入什么。 n 只是一个整数,但 f 应该是什么?
iter :: Int -> (a -> a) -> (a -> a)
iter n f
| n > 0 = f . iter (n-1) f
| otherwise = id
iter' :: Int -> (a -> a) -> (a -> a)
iter' n = foldr (.) id . replicate n
此函数应该将给定函数f :: a -> a 与自身n :: Integer 次组成,例如iter 2 f = f . f。
再次调用函数时,我不明白该放什么而不是 f 作为参数。
【问题讨论】:
-
在第一个示例中,
f应该是一个接受整数并返回整数的函数。在第二个示例中,f应该是一个函数,它接受任何类型的参数并返回相同类型的值。 -
在
total中使用count作为输入整数和foldr的累加器很奇怪。这是故意的吗? -
你写的是
total吗?有一种更简单的方法来实现它。 (使用map和sum。)
标签: function haskell functional-programming