递归时Haskell Print?

标签 haskell recursion

foo:: Int -> Int -> Int
foo z x = if (z < 100) 
             then z * foo (z+(x*z)) z
             else z

每次从自身调用时,你将如何打印输出(整数 z)?你能有返回 IO 和 Int 的函数吗?您需要辅助功能吗?

最佳答案

为简单起见,您可以使用 trace .但是,它不适合实际生产代码,因为它破坏了引用透明度。trace需要 String打印和返回值。

import Debug.Trace

foo:: Int -> Int -> Int
foo z x = trace ("z = " ++ show z) $ if (z < 100) 
    then z * foo (z+(x*z)) z
    else z

*Main> foo 1 2
 z = 1
 z = 3
 z = 6
 z = 24
 z = 168
 72576

关于递归时Haskell Print?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9848842/

相关文章:

java - 汉诺塔,工作但不应该

recursion - Ocaml:元组列表的递归

haskell - foldMap::(Monoid m) => (a -> m) -> f a -> m 类型是什么意思以及如何实现它?

haskell - 为什么app在Applicative里面可用?

java - 跳出循环中的递归函数但让循环继续

java - java中的递归和if语句

python - 汉诺塔调用追踪

haskell - 错误 `Could not deduce (a ~ b)` 是什么意思?

class - 导入 haskell 模块说 "not in scope"

haskell - 追踪一棵树?