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/