list - Haskell - 如何创建矩阵

标签 list haskell matrix

给定矩阵的大小和位置 p。如何用 p 中的 1 和其他位置的 0 填充矩阵?

Ex.: size=(3,3) p=(3,1)

[0 0 0]
[0 0 0]
[1 0 0]

我定义:
type Matrix= [[Int]]
type Pos = (Int,Int)

f:: Pos->Pos->Matrix
f例如,返回将是:
 [[0,0,0],[0,0,0],[1,0,0]]

我很难开始,即不知道如何实现功能 f .谁能帮我?

最佳答案

我喜欢 AndrewC 的回答,但我会一口气完成,嵌套列表推导并仅测试位置的相等性,而不是单独的行和列。

f :: Pos -> Pos -> Matrix
f (h, w) p =  [ [if (y, x) == p then 1 else 0 | x <- [1..w]]
              | y <- [1..h]]

我已经选择了我的对齐方式,以便 x水平拉伸(stretch)和y垂直延伸,事物的核心是根据坐标定义典型元素的表达式。如果行不同,则不会对列进行比较。我想可以使用 replicate w 0以清晰为代价稍微更有效地计算全零行。

我也考虑写
g :: Pos -> Pos -> Matrix
g (h, w) (y, x)  =   replicate (y-1) wzeros
                 ++  (replicate (x-1) 0 ++ 1 : replicate (w-x) 0)
                 :   replicate (h-y) wzeros
  where wzeros = replicate w 0

它更长,但在空间上更直接。它保留了更多的共享,并且可能减少了一些减法。但是如果位置超出相关范围,它的行为会有点奇怪。

关于list - Haskell - 如何创建矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12860798/

相关文章:

haskell - 嵌套的迭代器

python - 如何在 python 中打印元组列表中一列的所有值?

python - 复制 Pandas DF N 次

JAVA - 如何将 CSV 特定列的内容添加到列表<String>?

algorithm - Haskell 中的旋转卡尺

Haskell - 应用/Monad 实例

python - 如何查找字符串中子字符串的出现次数并将其存储到Python字典中?

python - 使用 openCV 和 python 旋转 2D 点

python - 如何在python中遍历矩阵

list - Haskell 函数对输入列表进行排序,然后对排序列表进行处理