这个haskell表达式中(const(+1))的含义是什么?

时间:2014-11-16 10:40:50

标签: haskell stack const

因此,为了找出给定堆栈的大小,我使用以下函数:

sizeStack :: S.Stack a -> Int
sizeStack = foldrStack (const (+1)) 0

其中' foldrStack'是:

foldrStack :: (a -> b -> b) -> b -> S.Stack a -> b
foldrStack f z s
  | S.isEmpty s = z
  | otherwise = S.top s `f` foldrStack f z (S.pop s)

我的问题是:" const"的作用究竟是什么?在sizeStack?

另外,要将函数应用于堆栈中的所有元素,我使用它。你有更好的选择吗?

mapStack :: (a -> b) -> S.Stack a -> S.Stack b
mapStack f s = foldrStack (S.push . f) S.empty s

2 个答案:

答案 0 :(得分:3)

const忽略了它的论点。

因此在sizeStack中,它占用了堆栈的每个元素,并将1加到累加器中。 它不需要查看堆栈上的值来计算它。知道只有一个元素就足够了。所以const是合适的。

答案 1 :(得分:3)

它有助于将其可视化如下:

f = const (+1)
-- eta expand
f x = const (+1) x
-- definition of const:   const a b = a
f x = (+1)
-- eta expand
f x y = (+1) y
-- operator section
f x y = y+1

因此,您的代码等同于

sizeStack = foldrStack (\ x y -> y+1) 0    

正如Don Stewart解释的那样,意味着丢弃元素x并增加计数器y