在编写一些算法问题时,我已经使用了这些函数,我想知道是否有任何标准库类似物实现它们的功能:
将函数列表映射到一个值:
mapX :: a -> [a -> b] -> [b]
mapX _ [] = []
mapX x (f:fs) = [f x] ++ (mapX x fs)
Run Code Online (Sandbox Code Playgroud)
将二进制函数映射到两个列表:
map2 :: (a -> b -> c) -> [a] -> [b] -> [c]
map2 _ [] [] = []
map2 f (ax:axs) (bx:bxs) = [f ax bx] ++ map2 f axs bxs
Run Code Online (Sandbox Code Playgroud)
对我来说,有点奇怪all [] == True:(
all' :: (a -> Bool) -> [a] -> Bool
all' _ [] = False
all' f l = all f l
Run Code Online (Sandbox Code Playgroud)
^运算符是否实现快速取幂?
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)
Run Code Online (Sandbox Code Playgroud)
int*_*jay 14
将函数列表映射到一个值:
map ($x) fs
Run Code Online (Sandbox Code Playgroud)
$是函数应用程序运算符,因此($x)是一个将其参数应用于的函数x.
将二进制函数映射到两个列表:
zipWith.即使您通过在Hoogle上搜索类型签名而不知道函数名称,也可以找到此内容.
^运算符是否实现快速取幂?
是的.