小编Ren*_*ene的帖子

为什么你可以用foldl反转列表,而不是在Haskell中使用foldr

为什么你可以用foldl反转列表?

reverse' :: [a] -> [a]
reverse' xs = foldl (\acc x-> x : acc) [] xs
Run Code Online (Sandbox Code Playgroud)

但是这个给了我一个编译错误.

reverse' :: [a] -> [a]
reverse' xs = foldr (\acc x-> x : acc) [] xs
Run Code Online (Sandbox Code Playgroud)

错误

Couldn't match expected type `a' with actual type `[a]'
`a' is a rigid type variable bound by
  the type signature for reverse' :: [a] -> [a] at foldl.hs:33:13
Relevant bindings include
x :: [a] (bound at foldl.hs:34:27)
acc :: [a] (bound at foldl.hs:34:23)
xs :: …
Run Code Online (Sandbox Code Playgroud)

haskell fold

10
推荐指数
5
解决办法
8229
查看次数

为什么你可以在haskell中定义没有参数的函数

我有部分应用的函数add来创建一个新函数addOne.

add :: Int -> (Int -> Int)
add x y = x + y
Run Code Online (Sandbox Code Playgroud)

addOne可以使用显式参数定义

addOne :: Int -> Int
addOne y = add 1 y
Run Code Online (Sandbox Code Playgroud)

或没有explict参数

addOne :: Int -> Int
addOne = add 1
Run Code Online (Sandbox Code Playgroud)

我有四个问题:

  1. 为什么我没有显式参数来定义新函数?
  2. 这两个定义之间有什么区别吗?
  3. 我何时知道何时可以在没有参数的情况下定义函数?
  4. 哪个定义更受欢迎?何时?

haskell functional-programming partial-application

3
推荐指数
1
解决办法
323
查看次数