2010-11-29 2 views
2

나는이 스레드를 넘어서서 Haskell List Comprehension 이제이 함수의 모든 셀이 실제로 비어 있지만 오직 비어있는 상태의 소품을 작성하려고합니다. 컴파일 할 때 다음과 같은 오류 메시지가 표시됩니다.블럭에 소품 쓰기에 도움이 필요하십니까 :: 스도쿠 → [Pos] (Haskell)

{- 
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 

could't 매치 예상 유형 '(a, b)'는 첫 번째 인수 'FST'namley 쌍 '(!)'의 제 namley FST 유추 유형에 대해 '[순위] 의 첫 번째 인수 쌍 '(행) bankey ('행의 SUD) '

편집

내 질문에 내가 공백에서 얻을 목록 목록입니다입니다 [포스] 포함 [(아무것도, 아무것도), (아무것도, 아무것도 없음) ... 등].

두 튜플의 실제 요소가 모두 "없음"인지, 즉 [Pos]의 모든 요소가 (Nothing, Nothing)인지 확인하고 싶습니다. 이것을 어떻게 확인할 수 있습니까? 아무도 코드 샘플을 작성할 수 있습니까, Im은 haskell 구문을 잘 못합니다. 여기에 편집 2

가 여기에 soduku의 예

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

을 정의하는 방법이다, 컴파일러 오류가 무엇을 의미하는지 알려 드리겠습니다.

fst은 튜플 (a, b)에서 작동하지만 그 값은 [Pos]입니다.

pair이 튜플을 반환하는지 또는 첫 번째 요소와 두 번째 요소를 가져 오기 위해 목록 함수를 사용하십시오. 첫 번째 요소는 head pair이고 두 번째 요소는 pair !! 1입니다.

튜플을 반환하려면 pair을 원한다고 생각되지만 실제로 발생하는 것은 아닙니다. blanks sudPos의 목록을 반환합니다.


편집 : 좋아, 그래서 Pos이 튜플이며, 당신이 [Pos](Nothing, Nothing) 동일한 경우에만 튜플이 포함되어 있는지 확인하고 싶습니다.

데이브 (Dave)가 의견을 말한대로 이것을 수행하려면 all (==(Nothing, Nothing)) the_list과 같은 것을 시도해 볼 수 있습니다. the_list의 모든 요소가 (Nothing, Nothing) 인 경우이 값은 True을 반환합니다.

prop_blank_pos :: Sudoku -> Bool 
prop_blank_pos sud = all (==(Nothing, Nothing)) (blanks sud) 
+2

아마도 '쌍'은 튜플의 목록입니다. 그런 다음 Johan은 목록의 모든 요소에 대한 조건을 확인하기 위해'all'을 사용해야합니다. – dave4420

+0

liszt로 할 때 다음과 같은 오류 메시지가 표시됩니다. 예상 유형 '[(어쩌면, 아마도 어쩌면 a1)]과 일치 할 수 없음' 유추 유형 [Pos] 'all'의 두 번째 인수에서 ' namely (blanks sud) ' 표현식에서 모두 (≡ (Nothing, Nothing)) (blanks sud) 아무에게도 이것이 작동하도록 컴파일러를 기쁘게하는 방법이 있습니까? :) – Darren

+0

ghci에서 모듈을로드 한 후,': i Pos'의 결과는 무엇입니까? ': t blanks'의 결과는 무엇입니까? 컴파일러는 'Pos'가 절대로 (Nothing, Nothing)이 될 수 없다는 것을 알려주므로, 그 값과 비교하는 것은 의미가 없습니다. –

관련 문제