我被分配在 Haskell 中编码一个冰雹序列。必须给我一个整数并创建一个以最后一个数字 1 结尾的整数列表,例如。
-- > hailstone 4
-- [4,2,1]
-- > hailstone 6
-- [6,3,10,5,16,8,4,2,1]
-- > hailstone 7
-- [7,22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1]
我的答案最后应该只有一个 1,但是一旦达到 1,我不知道如何跳出循环。
hailstone :: Integer -> [Integer]
hailstone = takeWhile (>=1) . (iterate collatz)
where collatz n = if n == 1
then 1
else if even n
then n `div` 2
else 3*n+1
最后我得到了无限的 1。我怎样才能解决这个问题?