如何在 F# 中打印 table 时添加填充?

How to add padding in printing table in F#?

我正在尝试打印阶乘表:

输入: 一个整数 n.

输出:来自 1 的 table 阶乘结果!到 n!.

这是我所做的:

let toBigInt (n: int) = bigint(n)  // Convert an "int" to a "bigint".

// Factorial with bigint support:
let fac n = 
    [1..n] 
    |> List.map toBigInt 
    |> List.reduce (*) 

let printFacTable n =
    let listNum = [1 .. n]
    let listFac = listNum |> List.map fac
    let numFacPair = List.zip listNum listFac
    for (k, v)  in numFacPair
        do printfn "%d ! = %A" k v

结果:

> printFacTable 12;;
1 ! = 1
2 ! = 2
3 ! = 6
4 ! = 24
5 ! = 120
6 ! = 720
7 ! = 5040
8 ! = 40320
9 ! = 362880
10 ! = 3628800
11 ! = 39916800
12 ! = 479001600
val it : unit = ()

结果很好。我想通过调整 ! 前面的填充来垂直对齐 ! =。假设这个程序最多接受 8 位数字作为输入。我想填充应该是:

let padding = 8 - eachNum.length

但是不知道怎么放到程序块里。任何的想法?

Printf module documentation 中所述,您只需指定字段的宽度:

printfn "%8d ! = %A" k v

试试这个:

do printfn "%8d ! = %A" k v

我觉得左边的格式比较好:

for (k, v)  in numFacPair
    do printfn "%-2d ! = %A" k v

然后打印FacTable 12:

1  ! = 1
2  ! = 2
3  ! = 6
4  ! = 24
5  ! = 120
6  ! = 720
7  ! = 5040
8  ! = 40320
9  ! = 362880
10 ! = 3628800
11 ! = 39916800
12 ! = 479001600

Link: http://ideone.com/gJeK0B