Collatz予想

http://ll.jus.or.jp/2006/blog/doukaku2

import List;
skip2 x = head x : error "invalid" : skip2 (tail x)
skip3 x = head x : (skip3$tail$tail$tail x)
lencollatz :: [Integer]
lencollatz = 1 : (map (\(n,x,y)->1+(if even n then x else y)) (zip3 [2..] (skip2 lencollatz) (tail$tail$skip3 lencollatz)))
h = snd $ mapAccumL (\a b-> let m = max a b in (m,snd m)) (0,error "invalid") w
 where w = zip lencollatz [1..]

おまけ

collatz :: [[Integer]]
collatz = [1] : (map (\(n,x,y)->n:(if even n then x else y)) (zip3 [2..] (skip2 collatz) (tail$tail$skip3 collatz)))

tail 乱射しているあたりにやる気なさが。洒落た書き方するとバグるから。
mapAccumL Prelude にないから使いたくなかったのだけれども。使わないと面倒だった。

http://www.kmonos.net/wlog/63.html#_1701060713 三つ飛ばしが洒落てる。大体同じことしたかったのだけれども。