내 임무의이 부분에서 일부 진전을 관리했지만 내가 만든 그 아래의 코드의 일부 첨부 :목록 그리드 요소
module Grid where
data State = On | Off deriving (Eq, Show)
next :: State -> State
next On = Off
next Off = On
type Row = [State]
type Grid = [[State]]
type Point = (Int,Int)
initialRow :: Int -> Row
initialRow w = replicate w Off
updateRow :: Row -> Int -> Row
updateRow (r:rs) x
| x==0 = next r:rs
| otherwise = r : (updateRow rs (x-1))
update :: Grid -> Point -> Grid
update [[]] (x,y) = [[]]
update [(g:gs)] (x,y) = [(updateRow (g:gs) x)]
바로 위의 마지막 줄에 나타낸 바와 같이, 내가 가진를 아래 그림과 같이 x = 임의의 Int 일 때 작동하도록 업데이트를 얻을 수 있습니다 (x 번째 요소가 반전 된 경우) - ghci.
*Grid> update [[Off,Off,Off,Off],[Off,Off,Off,Off]] (2,0)
*** Exception: Grid.hs:(24,0)-(25,47): Non-exhaustive patterns in function update
I가없는 것 : 나는 이와 같은 여러 목록 작업을 시도하거나 x 번째 요소를 업데이트 목록 내에서 특정 목록을 선택하면
*Grid> update [[Off,Off,Off,Off]] (2,0)
[[Off,Off,On,Off]]
*Grid>
그것은 모든 그러나 떨어진 온다 이 함수에서 공식을 '제랄 화'하십시오.
updateRow :: Grid -> Point -> Grid
기본적으로, 내가 뭘하고 싶은 것은이 같은에서 업데이트입니다 ... 이것에
[[Off,Off,Off,Off],
[Off,Off,Off,Off],
[Off,Off,Off,Off],
[Off,Off Off,Off]]
:
[[Off,Off,Off,Off],
[Off,Off,**On**,Off],
[Off,Off,Off,Off],
[Off,Off Off,Off]]
또한이 유형의 규칙을 따라야합니다
여기서 'x'는 요소 값이고 'y'는 IYGWIM 목록 내의 목록 값입니다.
미리 감사드립니다.
그것은 당신에게 명확하게 수를 'data Grid = [[State]]' –