【发布时间】:2018-09-11 03:12:57
【问题描述】:
我正在学习一些 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
)
这当然不是那么优雅!
是否有一种优雅(单行)的方式来实现正确打印?
【问题讨论】:
标签: functional-programming sml fold