F#

2017-09-27 13 views
2

の乗算表の比較乗算表を印刷する2つの方法を比較しようとしていますが、 "%s" mulTable nとprintf "%s" loopMulTable nを印刷するときに同じ文字列を出力しても、それらを比較するときは、最後の関数のすべての比較でfalseを出力するので、同じものと思われます。誰も私になぜ説明することができますか?F#

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#で初心者だと追加される場合がありますので、彼らは私が解決しているよ問題じゃないのに、他の欠陥がある可能性があります。

ありがとうございます!

答えて

3

この行がキャリッジリターン改行の組み合わせではなく改行を追加しているため、等価性のテストが失敗する可能性が最も高いです。

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

あなたがWindowsマシン上にある場合、あなたのソースコード内の改行は、ほとんどの復帰文字が含まれます。それを次のように変更してください:

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

これは完全に機能しました。どうもありがとうございました! –