我试图通过将render
与
toPosition
render :: Dimensie -> Figure a -> [[a]]
但是我不知道怎么做。您能提出一种方法吗?
type Figure a = Pos -> a
type Pos = (Double, Double) -- (x, y)
chessboard :: Figure Bool
chessboard (x, y) = even (round x) == even (round y)
type Dimensie = (Int, Int)
render :: Dimensie -> Figure a -> [[a]]
render = undefined
toPosition :: Dimensie → (Int, Int) → Pos
toPosition d (x, y) = (fromIntegral x ∗ 2 / b − 1, 1 − fromIntegral y ∗ 2 / h)
where
b = fromIntegral (fst d − 1)
h = fromIntegral (snd d − 1)
当我打电话给
时 Figure> render (3,3) chessboard
应该给予
[[True,False,True],[False,True,False],[True,False,True]]
然后,我想通过编写一个函数为某个布尔值给出一个特定字符来进行后续操作。例如,它应显示@
的{{1}}和True
的{{1}}
.
但是我该怎么写呢?
我不知道如何在False
函数中从boolChar :: Bool -> Char
boolChar = undefined
中获得[[Bool]]
,它不断告诉我[[a]]
和render
,然后它告诉哪条线出了问题。
那么,我该如何为couldn't match expected type ‘a’ with actual type ‘Bool’
写什么才能显示要求的结果呢?
答案 0 :(得分:0)
以下是一些提示:
编写一个函数以生成包含所有坐标的Pos
表,即像这样的[[Pos]]
generateTable (i,j) = [[(1,1),(1,2),...,(1,j)], ..., [(i,1),...,(i,j)]]
generateRow x j = [(x,1),...,(x,j)]
,然后使用它来生成每一行拥有table :: [[Pos]]
后,您就可以map (map figure) table
来获取通缉犯[[a]]
。
figure
函数,并避免首先生成配对。