nobsun です。

>   豊福です。
> 
> 早川さん
> > tailn n xs | length xs <= n = xs
> >            | otherwise      = tailn n (tail xs)
> 
>   xs が確定していなくても「length xs <= n」をある程度計算
> できるんでしたっけ。

いえ、improving value のような仕組を明示的に定義しないとできません。

ivLength :: [a] -> [Int]
ivLength = iter 0
  where iter n []     = []
        iter n (_:ls) = n:iter (n+1) ls

tailn n xs | elem (n+1) (ivLength xs) = tailn n (tail xs)
           | otherwise                = xs

かしらん。

--
Nobuo Yamashita                 mailto:nobsun / sampou.org
  I love programming.           http://www.sampou.org/
  I love pencil puzzles.        http://www.puzzle.jp/

--
ML: haskell-jp / quickml.com
使い方: http://QuickML.com/