4つ用意しました。
Haskell
1gusu1 :: [a] -> [a]
2gusu1 [] = []
3gusu1 [_] = []
4gusu1 (_:x:xs) = x : gusu1 xs
5
6gusu2 :: [a] -> [a]
7gusu2 xs = [x | (i, x) <- zip [0..] xs, odd i]
8
9gusu3 :: [a] -> [a]
10gusu3 = map snd . filter (odd . fst) . zip [0..]
11
12gusu4 :: [a] -> [a]
13gusu4 = map snd . filter fst . zip (cycle [False, True])
パターンマッチ。リストが空であればもちろん空、1要素しかなければそれは奇数番目なのでこれも空、2要素以上有れば1番目を捨てて2番目のみ取り出して、残り(これは空の場合もある)に対して再帰すれば良い。
リスト内包表記。[0..]
をzip
することでインデックス付きのリストにする。あとはインデックスが奇数(0から始めているので)の時の要素だけでリストとするだけ。
gusu2のmap
+filter
版。やっていることはgusu2と同じで、書き方が違うだけ。ポイントフリースタイルで書ける。
gusu3でインデックスを使わない版。奇数番目がFalse
、偶数番目がTrue
になるリストをzip
する。あとは、True
になっている物をfilter
して、map
で要素を取り出すだけ。
Q: なぜ、質問のコードを使わないのですか?
A: 文字列比較は遅いから。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/27 22:34
2017/04/27 22:39