質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Haskell

Haskellは高い機能性をもった関数型プログラミング言語で、他の手続き型プログラミング言語では難しいとされている関数でも容易に行うことができます。強い静的型付け、遅延評価などに対応しています。

Q&A

解決済

2回答

4535閲覧

Haskell リストからの取り出しについて

MtDew

総合スコア8

Haskell

Haskellは高い機能性をもった関数型プログラミング言語で、他の手続き型プログラミング言語では難しいとされている関数でも容易に行うことができます。強い静的型付け、遅延評価などに対応しています。

0グッド

0クリップ

投稿2017/04/27 16:30

リストが与えられたとき、偶数番目の要素だけを取り出す関数を作りたいのですが思うように作れません
kisuuhosii xs =zip xs (cycle ["Odd","Even"])を作って

ghci>kisuuhosii [1,2,3,4,5]
[(1,"Odd"),(2,"Even"),(3,"Odd"),(4,"Even"),(5,"Odd")]
となり、後は"Even"の含まれたタプルを消してfst関数を使えばうまく動くと思うのですが書き方がわかりません。
ヒントをお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

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])
  • gusu1

パターンマッチ。リストが空であればもちろん空、1要素しかなければそれは奇数番目なのでこれも空、2要素以上有れば1番目を捨てて2番目のみ取り出して、残り(これは空の場合もある)に対して再帰すれば良い。

  • gusu2

リスト内包表記。[0..]zipすることでインデックス付きのリストにする。あとはインデックスが奇数(0から始めているので)の時の要素だけでリストとするだけ。

  • gusu3

gusu2のmap+filter版。やっていることはgusu2と同じで、書き方が違うだけ。ポイントフリースタイルで書ける。

  • gusu4

gusu3でインデックスを使わない版。奇数番目がFalse、偶数番目がTrueになるリストをzipする。あとは、Trueになっている物をfilterして、mapで要素を取り出すだけ。

Q: なぜ、質問のコードを使わないのですか?
A: 文字列比較は遅いから。

投稿2017/04/27 22:15

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MtDew

2017/04/27 22:34

gusu2とgusu3がシンプルでわかり易かったです。 ありがとうございました。
raccy

2017/04/27 22:39

オススメはgusu1だったんですけど…これぞHaskellというコードなので…(他の言語じゃ、まずできない)
guest

0

どれくらいのヒントが必要なのかは分かりませんが、とりあえずfilter関数とmap関数を使えばできます。

投稿2017/04/27 17:28

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問