如何将“ n”表示为一系列数字

问题描述

| 我有以下功能:
type Coordin = (Int,Int)

data Grid = Open
          | Taken Int

myOwn :: Coordin -> Grid -> Bool
myOwn (x,y) grid  
    | ((board)!!(y)!!(x)) == Taken n           = True
    | otherwise                                = False
我希望
n
表示任何数字(因为在Data Grid中为特定类型指定了
Int
),但是这根本行不通!我考虑过使用
where
子句,但是如果还有其他想法,将不胜感激。谢谢。     

解决方法

借助camccann的解决方案:
type Board = [[Grid]]

isTaken :: Grid -> Bool
isTaken (Taken _) = True
isTaken Open      = False

myOwn :: Coordin -> Board -> Bool
myOwn (x,y) board = isTaken (board !! y !! x)
    ,保护后的表达式是布尔谓词,而不是模式绑定。因此,您无法将
Taken n
与计算出的值匹配,并将值绑定到
n
。 本质上,警卫等效于此:
myOwn (x,y) grid = if board !! y !! x == Taken n
                   then True
                   else False
除了多余的“ 8”语句外,很明显在这种情况下您不能绑定“ 1”。 要执行您要尝试的操作,您需要另一个模式匹配:
myOwn (x,y) grid = case board !! y !! x of
                       Taken n -> True
                       ...
但是,由于您实际上并未在此处使用
n
的值,因此最好编写一个单独的函数来为其服务:
isTaken (Taken _) = True
isTaken Open = False
...然后守卫那个。 顺便说一句,在风格上,后卫表达中有很多丑陋的多余的括号。您应该删除那些。     ,
myOwn (x,y) grid = not (board !! y !! x  == Open)
    

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...