변수를 사용하는 경우 newBoard
변수를 사용하는 경우 Prelude.head empty list
을 던집니다.이 경우 sortBoard
은 if-else에서이 오류를 발생시킵니다. 원래 board
문자를 사용하면이 오류가 발생하지 않습니다. Prelude.head : if 문에서 빈 목록
foo :: [[Char]] -> [(Int, Int)] -> [(Int, (Int, Int))] -> Int -> [(Int,Int)]-> [Int]-> [[Char]]
foo [] _ _ _ _ _ = []
foo board [] _ _ _ [] = board
foo board spot array number startArray move = nextStep
where
newBoard = set board (head spot) ('1')
tailSpot = tail spot
nextStep =
if tailSpot == []
then if (tail move) == []
then newBoard
else sortBoard newBoard array 1 [] (tail move)
else (foo newBoard tailSpot array 1 [] move)
이 코드에 explination 위해, 나는 게임 보드를 가지고 입력해야하는 '1'변수
spot
에 의해 주어진 특정 지점에서. 모든 지점 (
tailSpot
)을 통과했으며 더 이상 섹션이 없으면 (
move
) 변경해야합니다. 새 보드를 반환해야합니다. 변경해야 할 섹션이 아직 남아있는 경우이 기능을 종료하고 해당 섹션의 지점을 찾아 돌아가서 되돌릴 수 있습니다. 섹션과 스폿이 남아있는 경우 모든 스팟이 변경 될 때까지이 기능을 계속 사용합니다.
'head'와'tail'을 사용하는 것은 본질적으로 위험하며, 거의 필요하지 않습니다. 가능한 한 많이 피해야합니다. 그것들을 패턴 일치로 바꾸고'-Wall'로 경고를 켜서 GHC가 놓친 경우에 대해 경고 할 수있게하십시오. – chi