Skip to content

Commit

Permalink
Commit after test pass
Browse files Browse the repository at this point in the history
  • Loading branch information
Frohike999 committed Oct 19, 2024
1 parent cfc69fa commit d502d71
Showing 1 changed file with 47 additions and 30 deletions.
77 changes: 47 additions & 30 deletions src/Chapter1.hs
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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)


Expand All @@ -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
Expand Down Expand Up @@ -490,7 +490,8 @@ Implement a function that returns the last digit of a given number.
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 = mod (abs n) 10


{- |
Expand Down Expand Up @@ -520,7 +521,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 ((min (abs x) (abs y)) == (abs x)) then x else y


{- |
Expand Down Expand Up @@ -554,7 +555,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) && (x >= z)) || ((x <= z) && (x >= y)) = x
| (y <= x) && (y >= z) || ((y <= z) && (y >= x))= y
| otherwise = z

{- |
=⚔️= Task 8
Expand All @@ -568,7 +573,10 @@ True
>>> isVowel 'x'
False
-}
isVowel c = error "isVowel: not implemented!"
isVowel :: Char -> Bool
isVowel c
| ((c == 'a') || (c == 'e') || (c == 'i') || (c == 'o') || (c == 'u')) = True
| otherwise = False


{- |
Expand Down Expand Up @@ -631,8 +639,17 @@ 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 :: Int -> Int
sumLast2 n = nextLastDigit n + lastDigit n
where
last2Digits :: Int -> Int
last2Digits y = mod (abs y) 100

nextLastDigit :: Int -> Int
nextLastDigit x = div (last2Digits x) 10

sumLast2 n = error "sumLast2: Not implemented!"
lastDigit :: Int -> Int
lastDigit z = mod (last2Digits z) 10


{- |
Expand All @@ -652,8 +669,8 @@ 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 = if (div (abs n) 10) > 0 then firstDigit (div (abs n) 10) else (mod (abs n) 10)


{-
Expand Down

0 comments on commit d502d71

Please sign in to comment.