関数型をつきつめると
- 数列を元に、すべての部分数列を並べ上げ、
- 等差数列だけを残してフィルタし、
- 最長のものを出力する
という解法になるんだと思う。
自分の解答(2) は、上記の 1. と 2. が分離されてないので、まだまだ。
ちなみにすべての部分数列を並べ上げるコードをhaskellで書くなら
subseq :: [Int] -> [[Int]]
subseq [] = [[]]
subseq (x:xs) = (map (\xs' -> x:xs') (subseq xs)) ++ (subseq xs)
とかかな?