Conversation
vrom911
left a comment
There was a problem hiding this comment.
Great work! Thanks for taking your time to finish the Chapter ๐
| -- DON'T FORGET TO SPECIFY THE TYPE IN HERE | ||
| lastDigit n = error "lastDigit: Not implemented!" | ||
| lastDigit :: Int -> Int | ||
| lastDigit x = mod x 10 |
There was a problem hiding this comment.
Your implementation is almost correct ๐
Unfortunately, it returns negative numbers on negative inputs because of how mod works. Sometimes corner cases can be tricky to spot and fix...
| sumLast2 n = let last = mod n 10 | ||
| seclast = mod (div n 10) 10 -- div n 10 gives the digit stripped off last digit. |
There was a problem hiding this comment.
That is a wonderful solution! ๐๐ผ You correctly noticed that it is the div and mod, cool ๐
One hint to make your solution even shorter: you can see that you use both:
mod m 10
div m 10The standard library has the divMod function, that actually combines inside both div and mod. And this is exactly what you use!.
So you could write it this way:
(x, y) = divMod m 10You can see how we could pattern match on the pair ๐
| firstDigit n = error "firstDigit: Not implemented!" | ||
|
|
||
| firstDigit :: Int -> Int | ||
| firstDigit n = if n < 10 then n else firstDigit (div n 10) |
There was a problem hiding this comment.
I see, that for a negative number like -19, this implementation will return the negative number itself instead of the last digit because the first check n < 10 will always succeed for negative numbers.
Solutions for Chapter 1
cc @vrom911 @chshersh