[解決済み] リスト作成/連結のための構文
2022-02-27 14:42:13
質問
Haskellを始めてまだ2日目なのですが、以下の2つの関数定義の違いは何でしょうか?
Prelude> let swap (x1:x2:xs) = x2:x1:xs
Prelude> swap [1..5]
[2,1,3,4,5]
Prelude> let swap' (x1:x2:xs) = [x2] ++ [x1] ++ xs
Prelude> swap' [1..5]
[2,1,3,4,5]
つまり、x2:x1:xs は [x2] ++ [x1] ++ xs と何が違うのでしょうか? お願いします、そしてありがとうございます。
どのように解決するのですか?
タイプシグネチャを利用するとよいでしょう。
(:) :: a -> [a] -> [a]
(++) :: [a] -> [a] -> [a]
これらを調べるには
:type (:)
と
:type (++)
を ghci で使用します。
型名からわかるように、どちらもリストを生成するために使用されます。
は
:
演算子はリストを作成するために使用します (また、パターンマッチのためにリストを分解することもできます)。 リストを作るには
[1,2,3]
で構築するだけです。
1 : 2 : 3 : []
. の最初の要素は
:
はリストの先頭に追加する項目で、2 番目の要素はリスト(これも
:
で示される空リストと
[]
).
は、その
++
演算子はリストの連結です。 これは2つのリストを受け取って、それらを足し合わせます。
[1,2,3] ++ [4,5,6]
は合法ですが
1 ++ [1,2,3]
はありません。
関連
-
[解決済み] for'ループでインデックスにアクセスする?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] リスト内のアイテムのインデックスを検索する
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] パラメータに**(ダブルスター/アスタリスク)、*(スター/アスタリスク)がありますが、これはどういう意味ですか?
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] リストの最後の要素を取得する方法
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み】Haskellの入門編
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Python (2.x) リスト / サブリスト選択 -1 の不具合
-
[解決済み] TypeError: リストのインデックスは整数でなければならず、floatではない
-
[解決済み] Prolog-リストを繰り返し実行する
-
[解決済み] リストに指定されたメンバが含まれているかどうかを判断するルールを定義する
-
[解決済み] Prolog リストから要素を削除する
-
ERROR:バイナリへのオペランドが無効です。
-
error C2955: 'std::list' : クラステンプレートの使用にはテンプレート引数のリストが必要です。
-
[解決済み] Haskellでコマンドラインghciでリストをソートする方法
-
[解決済み】Scalaのリスト連結、::と++の比較
-
[解決済み】2つのリストを連結する - '+=' と extend() の違い)