相关疑难解决方法(0)

haskell中的累加器

在Haskell,如果我写

 fac n = facRec n 1
   where facRec 0 acc = acc
         facRec n acc = facRec (n-1) (acc*n)
Run Code Online (Sandbox Code Playgroud)

并使用GHC进行编译,结果会与我使用的结果不同

 fac 0 = 1
 fac n = n * fac (n-1)
Run Code Online (Sandbox Code Playgroud)

我可以轻松地完成fac n = product [1..n]并避免整个事情,但我对如何尝试使用懒惰语言进行尾递归感兴趣.我知道我仍然可以获得堆栈溢出,因为thunks正在构建,但是当我使用累加器时,实际发生的事情实际上是不同的(就最终的编译程序而言)而不是我刚才说出的天真递归?除了提高可读性之外,遗漏尾递归是否有任何好处?如果我runhaskell用来运行计算而不是先编译它,答案是否会发生变化?

haskell tail-recursion

6
推荐指数
1
解决办法
4101
查看次数

标签 统计

haskell ×1

tail-recursion ×1