Reputation: 33
I'm trying to compare two ways of printing a multiplication table, and even though they print identical strings when i printf "%s" mulTable n and printf "%s" loopMulTable n, they dont seem to be the same thing when comparing them, as it prints false for every comparison in the last function. Can anyone explain to me why?
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
Might i add that i am a beginner in programming and especially in F#, so there might be other flaws though they're not the problem that i'm looking to solve.
Thanks!
Upvotes: 2
Views: 253
Reputation: 36375
The test for equality is most likely failing because this line is appending a newline rather than a carriage-return-newline combination.
returnString <- returnString + (sprintf "\n")
If you are on a Windows machine, the line breaks in your source code will most likely include the carriage return character. Change it to the following and it should compare just fine:
returnString <- returnString + (sprintf "\r\n")
Upvotes: 3