我正在尝试使用f#创建一个N x M乘法表程序,其中n和m值由用户指定,并且该表被计算并存储在2D数组中并显示在控制台上。

任何帮助以使我的数组以类似于以下格式显示的方式将不胜感激:



而不是我程序中的那个

我的源代码是

open System

let func() =
        let multiplication  n m = Array2D.init n m (fun n m -> n * m)


        printf "Enter N Value: "
        let nValue = Console.ReadLine() |> System.Int32.Parse

        printf "\nEnter M Value: "
        let mValue = Console.ReadLine() |> System.Int32.Parse

        let grid = multiplication nValue mValue


        printfn "\n\n%A" grid

func()

我也想知道如何使我的值从1而不是0开始。

由于我是F#的初学者,因此非常感谢任何帮助。

最佳答案

您要做的就是将n和m加1,然后再将它们相乘,例如

let multiplication  n m = Array2D.init n m (fun n m -> (n + 1) * (m + 1))

但是,这里确实有一些括号疯狂,您可以将其重构如下:
let myMultFunction n m = (n + 1) * (m + 1)
let multiplication n m = Array2D.init n m myMultFunction

格式化有点棘手,使用for循环有点作弊,而且不是F#,但是考虑到我们使用的是本质上不起作用的2d数组,我想我可以偷偷摸摸了;)
printfn "A multiplication table:"
printf "   "
for col in 0 .. mValue - 1 do
    printf "%d\t" (col + 1)

printfn ""
for row in 0 .. nValue - 1 do
    for col in 0 .. mValue - 1 do
            if col = 0 then
                    printf "\n%d| " (row + 1)
            printf "%d\t" grid.[row, col]

10-06 09:05