リストADTのパターンマッチングカスタム実装

user11853608

Scalaでパターンマッチングがどのように機能するかを(一種で)理解しています。次の形式のリストが2つあるとしましょう。

  sealed abstract class IntList
  case class Empty()                        extends IntList // The empty list, often called Nils
  case class Element(n: Int, tail: IntList) extends IntList // Element is usually called Cons

関数を作成したいとしましょう take(n, xs)

  • xsの最初のn個の要素を返す必要があります。

通常のパターンマッチングで試しました:

  def take(n: Int, xs: IntList): IntList = xs match {
    case n == 0 => Empty()
    case xs : Empty => Empty() 
    case xs : Element => Element(xs.n, take(n-1, xs))
  }

しかし、もちろん、nは認識されません。 error: not found: value == case n == 0 => Empty()

どうすればこれを行うことができますか、それはおそらく簡単ですが、私はScalaの初心者ですか?

マリオガリック

最初のケースでタイプミスがあります。

case _ if n == 0 => Empty()

そして、あなたが合格するのを忘れた3番目のケースのバグ tail

case xs: Element => Element(xs.n, take(n-1, xs.tail))

試してみてください

sealed trait IntList
case object Empty extends IntList
case class Element(n: Int, tail: IntList) extends IntList

def take(n: Int, xs: IntList): IntList = xs match {
  case _ if n == 0 => Empty
  case Empty => Empty
  case Element(n, tail) => Element(n, take(n-1, tail))
}

val list = Element(1, Element(2, Element(3, Empty)))
take(2, list)   // res0: IntList = Element(1,Element(2,Empty))

検討case objectの代わりcase class Empty()に従ってデータがない場合、ケースオブジェクトTとケースクラスT()を定義ADTの違い?

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

インスタンス実装のパターンマッチング

分類Dev

トライツリーでのパターンマッチングの実装

分類Dev

カスタム データのフォーマットとパターン マッチング

分類Dev

カスタムコンストラクターHaskellでのパターンマッチング

分類Dev

Haskell:カスタムデータ型とのパターンマッチング

分類Dev

Racketのストリームとのパターンマッチング?

分類Dev

Pythonでのリストのパターンマッチング

分類Dev

SMLのリストのパターンマッチング

分類Dev

Bashスクリプトのパターンマッチング

分類Dev

カメラからのPythonOpenCVストリーミング-マルチスレッド、タイムスタンプ

分類Dev

haskellのリストのリストでのパターンマッチング

分類Dev

空のリストのリストのパターンマッチング

分類Dev

文字列のリストからパリンドロームパターンマッチング

分類Dev

カスタムビジターパターンの実装

分類Dev

カスタムタイムアウト実装のコルーチン

分類Dev

matplotlibのマトリックスのカスタムカラーリング

分類Dev

リスト内のグループのパターンマッチング

分類Dev

スプリングブートアクチュエータ-カスタムメトリックを実装する

分類Dev

Coqで既存の型付きコンストラクターの等価性を実装するための型のパターンマッチング

分類Dev

プロローグ:リスト内のパターンマッチング

分類Dev

マグノリア6.0カスタムアクションの実装

分類Dev

インスタンスマッチングのパターン

分類Dev

パターンマッチングと無限リスト

分類Dev

パターンマッチングによるリスト生成

分類Dev

リスト内包表記とパターンマッチング

分類Dev

キーワードリストのパターンマッチング

分類Dev

MapStruct:エンリッチマッピング注釈カスタムマッパーを定義します

分類Dev

リストの最後の要素でのパターンマッチング

分類Dev

スクリプトの最初の入力パターンのマッチング

Related 関連記事

  1. 1

    インスタンス実装のパターンマッチング

  2. 2

    トライツリーでのパターンマッチングの実装

  3. 3

    カスタム データのフォーマットとパターン マッチング

  4. 4

    カスタムコンストラクターHaskellでのパターンマッチング

  5. 5

    Haskell:カスタムデータ型とのパターンマッチング

  6. 6

    Racketのストリームとのパターンマッチング?

  7. 7

    Pythonでのリストのパターンマッチング

  8. 8

    SMLのリストのパターンマッチング

  9. 9

    Bashスクリプトのパターンマッチング

  10. 10

    カメラからのPythonOpenCVストリーミング-マルチスレッド、タイムスタンプ

  11. 11

    haskellのリストのリストでのパターンマッチング

  12. 12

    空のリストのリストのパターンマッチング

  13. 13

    文字列のリストからパリンドロームパターンマッチング

  14. 14

    カスタムビジターパターンの実装

  15. 15

    カスタムタイムアウト実装のコルーチン

  16. 16

    matplotlibのマトリックスのカスタムカラーリング

  17. 17

    リスト内のグループのパターンマッチング

  18. 18

    スプリングブートアクチュエータ-カスタムメトリックを実装する

  19. 19

    Coqで既存の型付きコンストラクターの等価性を実装するための型のパターンマッチング

  20. 20

    プロローグ:リスト内のパターンマッチング

  21. 21

    マグノリア6.0カスタムアクションの実装

  22. 22

    インスタンスマッチングのパターン

  23. 23

    パターンマッチングと無限リスト

  24. 24

    パターンマッチングによるリスト生成

  25. 25

    リスト内包表記とパターンマッチング

  26. 26

    キーワードリストのパターンマッチング

  27. 27

    MapStruct:エンリッチマッピング注釈カスタムマッパーを定義します

  28. 28

    リストの最後の要素でのパターンマッチング

  29. 29

    スクリプトの最初の入力パターンのマッチング

ホットタグ

アーカイブ