2

私はこのスレッドHaskell List Comprehensionに出くわしましたそして今、この関数のすべてのセルが実際には空白であることを示す小道具を書き込もうとしていますが、コンパイルしようとすると次のエラーメッセージが表示されます。

{-
Property that states that all cells in the blanks list are actually blank
-}
prop_blank_pos :: Sudoku →  Bool
prop_blank_pos sud = (rows sud) !! (fst pair) !! (snd pair) ≡ Nothing
   where pair = blanks sud

最初の引数 'fst'' namley ペアと 2 番目の '(!!)' namley fst ペア '(行) バンキー ('rows sud)'

編集

私の質問は、空白から取得したリストは、[(Nothing,Nothing),(Nothing,Nothing)...etc] を含む [Pos] リストです。

両方の要素のすべてのタプルが実際に「Nothing」であること、つまり [Pos] 内のすべての要素が (Nothing,Nothing) であることを確認したいと考えています。どうすればこれを確認できますか? コードサンプルを書いてくれる人はいますか? 私は haskell 構文が苦手です。

編集 2

これがソドゥクの例です

example :: Sudoku
  example =
    Sudoku
      [ [Just 3, Just 6, Nothing,Nothing,Just 7, Just 1, Just 2, Nothing,Nothing]
      , [Nothing,Just 5, Nothing,Nothing,Nothing,Nothing,Just 1, Just 8, Nothing]
      , [Nothing,Nothing,Just 9, Just 2, Nothing,Just 4, Just 7, Nothing,Nothing]
      , [Nothing,Nothing,Nothing,Nothing,Just 1, Just 3, Nothing,Just 2, Just 8]
      , [Just 4, Nothing,Nothing,Just 5, Nothing,Just 2, Nothing,Nothing,Just 9]
      , [Just 2, Just 7, Nothing,Just 4, Just 6, Nothing,Nothing,Nothing,Nothing]
      , [Nothing,Nothing,Just 5, Just 3, Nothing,Just 8, Just 9, Nothing,Nothing]
      , [Nothing,Just 8, Just 3, Nothing,Nothing,Nothing,Nothing,Just 6, Nothing]
      , [Nothing,Nothing,Just 7, Just 6, Just 9, Nothing,Nothing,Just 4, Just 3]
      ]

編集3数独の定義方法は次のとおりです

data Sudoku = Sudoku { rows :: [[Maybe Int]] }
 deriving ( Show, Eq )
4

1 に答える 1

4

正確に何が必要なのかわからないので、コンパイラ エラーの意味を説明します。

fstタプル(a, b)で動作しますが、あなたはそれを与えています[Pos]

必ずpairタプルを返すようにするか、リスト関数を使用して最初と 2 番目の要素 (最初と 2 番目の要素など) を取得してhead pairくださいpair !! 1

タプルを返したいようですpairが、実際にはそうではありません。blanks sudのリストを返していますPos


編集: わかりました。a はタプルです。 aに等しいタプルのみが含まれているPosかどうかを確認します。[Pos](Nothing, Nothing)

デイブがコメントで言ったように、これを行うには、次のようなものを試すことができますall (==(Nothing, Nothing)) the_listTrueこれは、 のすべての要素the_listが と等しい場合に返され(Nothing, Nothing)ます。

prop_blank_pos :: Sudoku -> Bool
prop_blank_pos sud = all (==(Nothing, Nothing)) (blanks sud)
于 2010-11-29T10:46:16.223 に答える