Haskell:在同一行内多次调用函数

时间:2013-03-01 22:47:25

标签: haskell

如果我有类似以下的功能

f x = if g x /= Nothing then g x else False

gf调用两次,或者Haskell'缓存'第一个实例后g x的结果可能在以后的同一行中使用?我试图优化一些代码,但我不知道上面那些代码的功能是否比我想要的那么贵。

提前致谢。

1 个答案:

答案 0 :(得分:14)

Haskell实现不会记忆函数调用。

GHC等Haskell编译器执行do common subexpression eliminiation但存在限制。

如有疑问,请分享结果。

f x = if g' /= Nothing then g' else False
    where g' = g x

但是你有一个类型错误,因为g'不能同时是一个布尔值和一个Maybe。

但写得更好:

f x = case g x of
          Nothing -> ..
          Just _  -> ..

仅在一个分支中计算和共享结果。