我正在研究一些SML / NJ,我对自己提出了以下问题:
鉴于Array2
grid
包含每个单元格中的字符串,并且在每行的末尾,\n
找到一种方法来优雅地打印数组(使用折叠和类似的东西)
我的尝试是
print (Array2.fold Array2.RowMajor (op ^) "" grid)
以正确的顺序打印所有行但每行都颠倒了。
如果这是一个列表,它将支持foldl
和foldr
函数,因此整个过程将是微不足道的。
传统的打印方式是
fun printGrid i N M grid =
if (i >= N) then ()
else
(
let
fun printRow j M =
if (j >= M + 1) then ()
else (print (Array2.sub(grid, i, j)); printRow (j+1) M)
in
printRow 0 M;
printGrid (i + 1) N M grid
end
)
当然不是那么优雅!
是否有优雅(单线)的方式来正确打印?
答案 0 :(得分:2)
在您的试用版中,您使用(op ^)
,fn (x, ans) => x ^ ans
。但是,您想要的是fn (x, ans) => ans ^ x
,以便连接的顺序相反。
val arr = Array2.fromList [["1", "2", "\n"], ["3", "4", "\n"]];
fun myConcat (x, ans) = ans ^ x;
print (Array2.fold Array2.RowMajor myConcat "" arr);
12
34
val it = () : unit