내 기능 :결함이 기지의 경우 하스켈
type Block = [Maybe Int]
checkBlock' :: Block -> Block
checkBlock' (r:rs)
| r == [] = []
| isJust r == True = r:checkBlock' rs
| isNothing r == True = checkBlock' rs
checkBlock :: Block -> Block
checkBlock (r:rs)
| r == [] = []
| isNothing r == True = r:checkBlock rs
| isJust r == True = checkBlock rs
나는 그냥 INTS과의 속삭임의 목록을 검사하고, 단지 그냥 값을 반환하는 첫 번째 함수로합니다. 두 번째 함수는 Nothings 만 반환합니다.
그들은 basecase r == [] = []
없이 잘 컴파일,하지만 그것으로 내가 오류 얻을 :
Sudoku.hs:104:12:
Couldn't match expected type `Maybe Int' with actual type `[t0]'
In the second argument of `(==)', namely `[]'
In the expression: r == []
In a stmt of a pattern guard for
an equation for checkBlock':
r == []
Failed, modules loaded: none.
내가 거기에 배치 할 수 있습니다 대신 []이 컴파일 할을? 나는 아이디어의 ut을 실행했습니다. 바람직하게는,
checkBlock :: Block -> Block
checkBlock [] = []
checkBlock (r:rs)
| isNothing r == True = r:checkBlock rs
| isJust r == True = checkBlock rs
또는 :
하나님 감사합니다, emberrasing! – Rewbert
@Rewbert 또한'x == True'는'x'와 똑같습니다. 당신은'| isNothing r = r : checkBlock rs' 그리고 다음 행에 대해서도 마찬가지입니다. – bheklilr
'checkBlock = 필터 isNothing' –