-
-
Notifications
You must be signed in to change notification settings - Fork 851
Solutions for Chapter 1,2 & 3 #556
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
885e820
bbfbb0e
f10a336
230e1e3
6ebc211
5d986b6
f4d7b6b
cc5b6b6
2cb8944
1854160
87daf04
6f0082a
ff95475
7c4b137
35a504f
91160f5
91f8ce5
7fb937b
4e8865a
e33eb0d
1255f80
61c71e5
761d07c
7a6aad2
b06bd78
92529dc
16e5dd3
f133a8c
d18d537
eb1bdd5
2cb5c60
96748fa
2932414
88e7cb1
cbf03ca
3fad13c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
|
@@ -209,31 +209,31 @@ So, the output in this example means that 'False' has type 'Bool'. | |||||
> Try to guess first and then compare your expectations with GHCi output | ||||||
|
||||||
>>> :t True | ||||||
<INSERT THE RESULT INSTEAD OF THE TEXT> | ||||||
True :: Bool | ||||||
>>> :t 'a' | ||||||
<INSERT THE RESULT INSTEAD OF THE TEXT> | ||||||
'a' :: Char | ||||||
>>> :t 42 | ||||||
<INSERT THE RESULT INSTEAD OF THE TEXT> | ||||||
42 :: Num a => a | ||||||
|
||||||
A pair of boolean and char: | ||||||
>>> :t (True, 'x') | ||||||
<INSERT THE RESULT INSTEAD OF THE TEXT> | ||||||
(True, 'x') :: (Bool, Char) | ||||||
|
||||||
Boolean negation: | ||||||
>>> :t not | ||||||
<INSERT THE RESULT INSTEAD OF THE TEXT> | ||||||
not :: Bool -> Bool | ||||||
|
||||||
Boolean 'and' operator: | ||||||
>>> :t (&&) | ||||||
<INSERT THE RESULT INSTEAD OF THE TEXT> | ||||||
(&&) :: Bool -> Bool -> Bool | ||||||
|
||||||
Addition of two numbers: | ||||||
>>> :t (+) | ||||||
<INSERT THE RESULT INSTEAD OF THE TEXT> | ||||||
(+) :: Num a => a -> a -> a | ||||||
|
||||||
Maximum of two values: | ||||||
>>> :t max | ||||||
<INSERT THE RESULT INSTEAD OF THE TEXT> | ||||||
max :: Ord a => a -> a -> a | ||||||
|
||||||
You might not understand each type at this moment, but don't worry! You've only | ||||||
started your Haskell journey. Types will become your friends soon. | ||||||
|
@@ -301,43 +301,43 @@ expressions in GHCi | |||||
functions and operators first. Remember this from the previous task? ;) | ||||||
|
||||||
>>> 1 + 2 | ||||||
<INSERT THE RESULT INSTEAD OF THE TEXT> | ||||||
3 | ||||||
|
||||||
>>> 10 - 15 | ||||||
<INSERT THE RESULT INSTEAD OF THE TEXT> | ||||||
-5 | ||||||
|
||||||
>>> 10 - (-5) -- negative constants require () | ||||||
<INSERT THE RESULT INSTEAD OF THE TEXT> | ||||||
15 | ||||||
|
||||||
>>> (3 + 5) < 10 | ||||||
<INSERT THE RESULT INSTEAD OF THE TEXT> | ||||||
True | ||||||
|
||||||
>>> True && False | ||||||
<INSERT THE RESULT INSTEAD OF THE TEXT> | ||||||
False | ||||||
|
||||||
>>> 10 < 20 || 20 < 5 | ||||||
<INSERT THE RESULT INSTEAD OF THE TEXT> | ||||||
True | ||||||
|
||||||
>>> 2 ^ 10 -- power | ||||||
<INSERT THE RESULT INSTEAD OF THE TEXT> | ||||||
1024 | ||||||
|
||||||
>>> not False | ||||||
<INSERT THE RESULT INSTEAD OF THE TEXT> | ||||||
True | ||||||
|
||||||
>>> div 20 3 -- integral division | ||||||
<INSERT THE RESULT INSTEAD OF THE TEXT> | ||||||
6 | ||||||
|
||||||
>>> mod 20 3 -- integral division remainder | ||||||
<INSERT THE RESULT INSTEAD OF THE TEXT> | ||||||
2 | ||||||
|
||||||
>>> max 4 10 | ||||||
<INSERT THE RESULT INSTEAD OF THE TEXT> | ||||||
10 | ||||||
|
||||||
>>> min 5 (max 1 2) | ||||||
<INSERT THE RESULT INSTEAD OF THE TEXT> | ||||||
2 | ||||||
|
||||||
>>> max (min 1 10) (min 5 7) | ||||||
<INSERT THE RESULT INSTEAD OF THE TEXT> | ||||||
5 | ||||||
|
||||||
Because Haskell is a __statically-typed__ language, you see an error each time | ||||||
you try to mix values of different types in situations where you are not | ||||||
|
@@ -428,7 +428,7 @@ task is to specify the type of this function. | |||||
>>> squareSum 3 4 | ||||||
49 | ||||||
-} | ||||||
|
||||||
squareSum :: Int -> Int -> Int | ||||||
squareSum x y = (x + y) * (x + y) | ||||||
|
||||||
|
||||||
|
@@ -449,7 +449,7 @@ Implement the function that takes an integer value and returns the next 'Int'. | |||||
function body with the proper implementation. | ||||||
-} | ||||||
next :: Int -> Int | ||||||
next x = error "next: not implemented!" | ||||||
next x = x + 1 | ||||||
|
||||||
{- | | ||||||
After you've implemented the function (or even during the implementation), you | ||||||
|
@@ -489,9 +489,8 @@ Implement a function that returns the last digit of a given number. | |||||
results. Or you can try to guess the function name, search for it and check | ||||||
whether it works for you! | ||||||
-} | ||||||
-- DON'T FORGET TO SPECIFY THE TYPE IN HERE | ||||||
lastDigit n = error "lastDigit: Not implemented!" | ||||||
|
||||||
lastDigit :: Int -> Int | ||||||
lastDigit n = abs n `mod` 10 | ||||||
|
||||||
{- | | ||||||
=⚔️= Task 6 | ||||||
|
@@ -520,7 +519,7 @@ branches because it is an expression and it must always return some value. | |||||
satisfying the check will be returned and, therefore, evaluated. | ||||||
-} | ||||||
closestToZero :: Int -> Int -> Int | ||||||
closestToZero x y = error "closestToZero: not implemented!" | ||||||
closestToZero x y = if (abs x) < (abs y) then x else y | ||||||
|
||||||
|
||||||
{- | | ||||||
|
@@ -553,8 +552,11 @@ value after "=" where the condition is true. | |||||
|
||||||
Casual reminder about adding top-level type signatures for all functions :) | ||||||
-} | ||||||
|
||||||
mid x y z = error "mid: not implemented!" | ||||||
mid :: Int -> Int -> Int -> Int | ||||||
mid x y z | ||||||
| x <= y && y <= z = y | ||||||
| x >= y && y >= z = y | ||||||
| otherwise = mid y z x | ||||||
WolfSoko marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
{- | | ||||||
=⚔️= Task 8 | ||||||
|
@@ -568,7 +570,19 @@ True | |||||
>>> isVowel 'x' | ||||||
False | ||||||
-} | ||||||
isVowel c = error "isVowel: not implemented!" | ||||||
isVowel :: Char -> Bool | ||||||
isVowel c | ||||||
| c == 'a' = True | ||||||
| c == 'e' = True | ||||||
| c == 'i' = True | ||||||
| c == 'o' = True | ||||||
| c == 'u' = True | ||||||
| c == 'A' = True | ||||||
| c == 'E' = True | ||||||
| c == 'I' = True | ||||||
| c == 'O' = True | ||||||
| c == 'U' = True | ||||||
| otherwise = False | ||||||
|
||||||
|
||||||
{- | | ||||||
|
@@ -631,9 +645,12 @@ Implement a function that returns the sum of the last two digits of a number. | |||||
Try to introduce variables in this task (either with let-in or where) to avoid | ||||||
specifying complex expressions. | ||||||
-} | ||||||
|
||||||
sumLast2 n = error "sumLast2: Not implemented!" | ||||||
|
||||||
sumLast2 :: Int -> Int | ||||||
sumLast2 n = (lastDigit n) + secondLastDigit | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Nice reusage of previous I see that you have already a var to represent this bit –
Suggested change
|
||||||
where | ||||||
lastTwo = (mod (abs n) 100) | ||||||
lastD = lastDigit n | ||||||
secondLastDigit = (lastTwo - lastD) `div` 10 | ||||||
|
||||||
{- | | ||||||
=💣= Task 10* | ||||||
|
@@ -652,9 +669,12 @@ Implement a function that returns the first digit of a given number. | |||||
You need to use recursion in this task. Feel free to return to it later, if you | ||||||
aren't ready for this boss yet! | ||||||
-} | ||||||
|
||||||
firstDigit n = error "firstDigit: Not implemented!" | ||||||
|
||||||
firstDigit :: Int -> Int | ||||||
firstDigit n | ||||||
| absN < 10 = absN | ||||||
| otherwise = firstDigit (div absN 10) | ||||||
where | ||||||
absN = abs n | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Very elegant to use |
||||||
|
||||||
{- | ||||||
You did it! Now it is time to open a pull request with your changes | ||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
()
are redundant here. I see how it can be confusing to see when to use them and when not to use, especially in the beginning. But it's usually better to remove redundant brackets for cleaner code 🧹