我想在haskell中获得一个填充了硬编码值的矩阵。然而,由于haskell中的缩进规则,我设法做到这一点的唯一方法是将整个矩阵写在一条难以阅读的行上。
matrix = [
[1,0,0],
[0,2,0],
[0,0,3]
] --parse error (possibly incorrect indentation or mismatched brackets)
matrix = [ [1,0,0], [0,1,0], [0,0,1] ] --OK
建议的方法是什么?
答案 0 :(得分:5)
haskell社区决定我们想要缩进的方式是:
matrix = [ [1, 0, 0 ]
, [0, 2, 0 ]
, [0 ,0 ,3 ]
]
或
matrix = [ [1, 0, 0 ]
, [0, 2, 0 ]
, [0 ,0 ,3 ] ]
领先的逗号是迄今为止最主要的风格:)
您也可以将矩阵调低
matrix =
[ [1, 0, 0 ]
, [0, 2, 0 ]
, [0 ,0, 3 ] ]
matrix =
[ [1, 0, 0 ]
, [0, 2, 0 ]
, [0 ,0, 3 ]
]
您的示例的问题在于,只有缩进“过m
”的内容才被视为“仍然是矩阵声明的一部分”。例如:
matrix = blah
bloh
bluh
bluh
与m
处于同一级别,因此haskell看到bluh
并且去了,“这是一个新的声明!我们已完成{{1 }}!“
不可否认,编译器错误可能更清楚一点:)