【问题标题】:Haskell print or show in a functionHaskell 在函数中打印或显示
【发布时间】:2021-12-09 22:07:44
【问题描述】:

我是 Haskell 的新手,尝试的东西很少。我有一个小程序。

module Collatz where
compute_collatz :: Integer -> Integer
compute_collatz x = if even x then evenComputation else oddcomputation
    where evenComputation = div x 2
          oddcomputation = 3 * x + 1

compute_steps :: Integer -> Integer
compute_steps 1 = 0
compute_steps num = 1 + compute_steps(compute_collatz(num))

我想打印每个compute_collatz(num) 调用生成的数字序列。如何在 compute_stepscompute_collatz 函数中添加 printshow 语句

【问题讨论】:

  • 你可以使用trace :: String -> a -> a,所以像compute_collatz x = trace (show x) (if ...)
  • 所以不是应该像 compute_steps num = trace (show num)(1 + compute_steps(compute_collat​​z(num))) 因为我想打印所有计算出来的数字+

标签: haskell printing


【解决方案1】:

这不是一个好方法。

更好的选择是使函数的结果成为访问数字的列表,而不仅仅是最后一个。

collatzSeq :: Integer -> [Integer]
collatzSeq 1 = [1]
collatzSeq x
 | even x     = x : collatzSeq (x`div`2)
 | otherwise  = x : collatzSeq (3*x + 1)

然后您可以使用此列表来计算步数、打印等。请注意,由于惰性,您需要担心在打印开始之前需要计算整个列表 - 它只会在您进行计算时打印。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多