返回该宽度和高度的网格中所有可能坐标的列表

问题描述

所以我正在写一个函数allCoords,该函数返回宽度w和高度h width和{{1} }必须为非负整数,以返回有意义的结果。

示例:height应该返回allCoords 3 2

这是我到目前为止所拥有的,但是我什至不知道如何开始编写该函数

[(0,0),(0,1),2),(1,2)]

解决方法

您可以使用list comprehension来做到这一点。

[ (x,y) | x <- [0..1],y <- [0..2] ]

将在您的示例中列出该列表。

您的函数将需要定义为:

type GridCoord = (Int,Int)

allCoords :: Int -> Int -> [GridCoord]
allCoords height width = [ (x,y) | x <- [0..width-1],y <- [0..height-1] ]
,

range函数可以做到这一点。

import Data.Ix
allCoords h w = range ((0,0),(w,h))
,

我们可以利用列表的FunctorApplicative实例通过以下方式生成该列表:

allCoords :: (Num a,Enum a,Num b,Enum b) => a -> b -> [(a,b)]
allCoords h w = (,) <$> [0 .. h-1] <*> [0 .. w-1]

这里(,) <$> [0 .. h-1]将生成一个函数b -> (a,b)的列表,其中元组的第一项已被填充。启用TupleSection s时,此列表等效于{{1 }}。

然后[(0,),(1,…,(w-1,)]函数将从该列表中获取一个函数,并针对每个此类函数在列表(<*>)中的每个值上对其进行调用,从而构造2个元组。

例如:

[0 .. w-1]

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...