Haskell函数,可替代地应用输入一元函数

时间:2015-12-09 00:06:10

标签: list function haskell input winghci

我正在尝试编写一个带有两个一元函数(f和g)和一个数字列表(ns)的Haskell函数,并将这些输入函数f和g应用于输入列表的元素。

例如:

func double square [2, 3, 4, 5, 6]

将返回

[4, 9, 8, 25, 12]

我正在使用WinGHCi作为我的编译器。任何有关编写此功能的帮助都将不胜感激,谢谢。

3 个答案:

答案 0 :(得分:6)

如果您不想使用任何库函数,可以使用递归来执行此操作:

func _ _ []     = []
func f g (x:xs) = f x : func g f xs

答案 1 :(得分:1)

扩展@ luqui的评论:

func f1 f2 l = zipWith ($) (cycle [f1, f2]) l

如果您不想使用库函数,只需查看它们的实现,它们就非常简单。

答案 2 :(得分:-2)

只是一个简单的解决方案......

fun :: (a -> b) -> (a -> b) -> [a] -> [b]
fun f g = reverse . snd . foldl step (0,[])
          where
             step (c,ac) x = (c + 1, (if even c then f x else g x) : ac)

由于您不想使用库函数,因此可以在不使用foldl的情况下重现相同的结果。这个想法很简单,使用计数器来知道哪个位置是偶数。

编辑:我对累加器造成了一点混淆。现在,这是正确的。