Q&A
何回も呼び出す関数の中で、リストxs (length xs = l) を xs = ys ++ zs (length ys = m ,length zs = n, m+n)のように2つに分割したいのです.
whereの中で、パターンマッチで一行でパパッとやるにはどうすれば良いのでしょうか?
以下のような質問にはグッドを送りましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
下記のような質問は推奨されていません。
- 間違っている
- 質問になっていない投稿
- スパムや攻撃的な表現を用いた投稿
適切な質問に修正を依頼しましょう。
回答2件
1
こんな問題はHoogleで検索したら楽かもしれません。
「リストxs (length xs = l) を xs = ys ++ zs (length ys = m ,length zs = n, m+n)のように2つに分割したい」
関数シグネチャ(と仮定義)にしたらこうなります
haskell
1f :: Int -> [a] -> ([a], [a]) 2f m xs = (ys, zs) where ys = ??; zs = ??
(その m + n の限定は Haskell に制約するのはまだ難しいですが、Idris ではできます。)
[Hoogle](https://hoogle.haskell.org/?hoogle=Int -> [a] -> ([a]%2C [a])) でシグネチャを検索したら、splitAt が検索結果に見えます。
haskell
1splitAt :: Int -> [a] -> ([a], [a])
(Int と [a] の位置を逆にしても大丈夫です)
そこから、ソースも読めちゃいます!歴史をちょっと略しますと、splitAt の定義は簡単です:
haskell
1splitAt n xs = (take n xs, drop n xs)
こちらもパッタンマッチではありませんが、定義を直接に使えてもいいです。
haskell
1... 2 where 3 (ys, zs) = (take n xs, drop n xs)
投稿2020/07/08 07:00
総合スコア462
0
ベストアンサー
パターンマッチのみでそれを行うのは不可能ですが、splitAt
関数を使えばやりたいことは一行で実現できるかと思います。
????のように使います。
hs
1 ... 2where 3 (ys, zs) = splitAt m xs
投稿2020/06/02 04:27
編集2020/09/22 09:56総合スコア423
良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
関連した質問
Q&A
解決済
R:特定のまとまりの重複をカウントする方法
回答1
クリップ0
更新
2023/02/01
Q&A
解決済
【VBA】マクロ動作中にシートを移動して見えるようにしたい
回答1
クリップ0
更新
2023/02/01
Q&A
解決済
LINEbot:部分一致で返信したい(GAS、スプレッドシート利用)
回答2
クリップ1
更新
2023/02/02
Q&A
解決済
python selenium 複数のフォームにランダムに入力
回答2
クリップ0
更新
2023/01/27
意見交換
受付中
Python:データフレームを列ごとにプロット
回答4
クリップ0
更新
2023/02/02
Q&A
解決済
Javasilver問題
回答1
クリップ0
更新
2023/02/01
Q&A
解決済
for文が機能しなくて困っています
回答4
クリップ0
更新
2023/01/27
同じタグがついた質問を見る
Haskellは高い機能性をもった関数型プログラミング言語で、他の手続き型プログラミング言語では難しいとされている関数でも容易に行うことができます。強い静的型付け、遅延評価などに対応しています。
良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。