有没有标准库类似物:

时间:2011-07-05 23:03:44

标签: haskell

在编写一些算法问题时,我已经使用了这些函数,我想知道是否有任何标准库类似物实现它们的功能:

将函数列表映射到一个值:

mapX :: a -> [a -> b] -> [b]
mapX _ [] = []
mapX x (f:fs) = [f x] ++ (mapX x fs)

将二元函数映射到两个列表:

map2 :: (a -> b -> c) -> [a] -> [b] -> [c]
map2 _ [] [] = []
map2 f (ax:axs) (bx:bxs) = [f ax bx] ++ map2 f axs bxs

对我来说,all [] == True :(

。)有点奇怪
all' :: (a -> Bool) -> [a] -> Bool
all' _ [] = False
all' f l  = all f l

^运算符是否实现了快速取幂?

fastPow :: Int -> Int -> Int
fastPow x 0 = 1
fastPow x a
    | even a     = exp2 * exp2
    | odd a      = exp2 * exp2 * x
    where
        exp2 = fastPow x (div a 2)

1 个答案:

答案 0 :(得分:14)

将功能列表映射到一个值:

map ($x) fs

$是函数应用程序运算符,因此($x)是一个将其参数应用于x的函数。

将二元函数映射到两个列表:

zipWith。即使您通过在Hoogle上搜索类型签名而不知道函数名称,也可以找到此内容。

^运算符是否实现了快速取幂?

Yes