比较F#中的乘法表

时间:2017-09-27 16:49:37

标签: f#

我试图比较两种打印乘法表的方法,即使它们打印相同的字符串,当我打印"%s" mulTable n和printf"%s" loopMulTable n,它们在比较它们时看起来不一样,因为它在最后一个函数中为每个比较打印错误。任何人都可以向我解释原因吗?

let a = "      1    2    3    4    5    6    7    8    9   10
 1    1    2    3    4    5    6    7    8    9   10
 2    2    4    6    8   10   12   14   16   18   20
 3    3    6    9   12   15   18   21   24   27   30
 4    4    8   12   16   20   24   28   32   36   40
 5    5   10   15   20   25   30   35   40   45   50
 6    6   12   18   24   30   36   42   48   54   60
 7    7   14   21   28   35   42   49   56   63   70
 8    8   16   24   32   40   48   56   64   72   80
 9    9   18   27   36   45   54   63   72   81   90
10   10   20   30   40   50   60   70   80   90  100"

let mulTable n =
    a.[0..(n*54)+51]


let loopMulTable n = 
    let mutable returnString = ""
    returnString <- returnString + (sprintf  "  ")
    for i in 1..10 do
        returnString <- returnString + (sprintf "%5d" i)
    for x in 1..n do
        returnString <- returnString + (sprintf "\n")
        returnString <- returnString + (sprintf "%2d" x)
        for y in 1..10 do
            returnString <- returnString + (sprintf "%5d" (x*y))
    returnString

let o = "n:"
let u = "boolean value:"

let chooseN n =
    printfn "%5s %19s" o u
    for n in 1..n do
        printfn "%4d %15b" n ((loopMulTable n)=(mulTable n))


chooseN 5

我可以补充一点,我是编程的初学者,尤其是F#的初学者,所以可能还有其他瑕疵,尽管他们并不是我想要解决的问题。

谢谢!

1 个答案:

答案 0 :(得分:3)

对于相等性的测试很可能是失败的,因为这一行是追加换行而不是回车换行组合。

returnString <- returnString + (sprintf "\n")

如果您使用的是Windows计算机,则源代码中的换行符很可能包含回车符。将其更改为以下内容,它应该比较好:

returnString <- returnString + (sprintf "\r\n")