小编Lin*_*hen的帖子

你如何使这个Haskell幂函数尾递归?

我如何使这个Haskell幂函数尾递归?

turboPower a 0 = 1
turboPower a b
    | even b = turboPower (a*a) (b `div` 2)
    | otherwise = a * turboPower a (b-1)
Run Code Online (Sandbox Code Playgroud)

haskell tail-recursion

9
推荐指数
1
解决办法
1841
查看次数

Haskell中的类型

我是Haskell的新手,我很难理解推断类型和类似的工作方式.

map :: (a -> b) -> [a] -> [b]
(.) :: (a -> b) -> (c -> a) -> c -> b
Run Code Online (Sandbox Code Playgroud)

这到底是什么意思呢?

foldr :: (a -> b -> b) -> b -> [a] -> b
foldl :: (a -> b -> a) -> a -> [b] -> a
foldl1 :: (a -> a -> a) -> [a] -> a
Run Code Online (Sandbox Code Playgroud)

这些有什么区别?

和推断的类型

foldr map是[a] - > [a - > a] - > [a]

但为什么会这样呢?

谢谢!

haskell types type-inference inferred-type

9
推荐指数
1
解决办法
807
查看次数

你如何解决这个Haskell问题?

我想定义一个函数复制,仅使用列表推导来复制数值列表,例如:

replicate [5,1,3,2,8,1,2]
output: [5,5,5,5,5,1,3,3,3,2,2,8,8,8,8,8,8,8,8,1,2,2]
Run Code Online (Sandbox Code Playgroud)

我知道这很容易使用内置函数的'replicate',但只允许列表理解,我该怎么办呢?

谢谢!

haskell list-comprehension

1
推荐指数
2
解决办法
822
查看次数

你如何使用折叠图解决这个Haskell问题并采取?

定义一个函数复制,给定一个数字列表返回一个列表,每个数字都复制其值.使用折叠,地图和拍摄

..>复制[5,1,3,2,8,1,2]

产量:[5,5,5,5,5,1,3,3,3,2,2,8,8,8,8,8,8,8,8,1,2,2]

我已经使用List理解和递归来解决这个问题:

replicate2 [] = []
replicate2 (n:nn) = take n(repeat n) ++ replicate2 nn
Run Code Online (Sandbox Code Playgroud)

但是你如何使用折叠和地图来做到这一点?到目前为止我有:复制n = map(foldl1(取n(重复n))n)n这显然是错误的,但我想我很接近..

所以任何帮助都会很好,谢谢!

haskell higher-order-functions

-2
推荐指数
1
解决办法
995
查看次数