在编写一些算法问题时,我已经使用了这些函数,我想知道是否有任何标准库类似物实现它们的功能:
将函数列表映射到一个值:
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)