Solve task 02

This commit is contained in:
Manuel Thalmann 2024-03-14 18:02:18 +01:00
parent 0649df9598
commit 37ba1cb36d
2 changed files with 38 additions and 19 deletions

View file

@ -1,5 +1,5 @@
{- Contents {- Contents
A short integerroduction to Haskell; A short introduction to Haskell;
On how to create simple functions. On how to create simple functions.
-} -}
@ -10,7 +10,7 @@
{- General Syntax for functions {- General Syntax for functions
* Input on the left, output on the right. * Input on the left, output on the right.
* Functions also have a type: input type on the left * Functions also have a type: input type on the left
side, output type on the right side, arrow inbetween. side, output type on the right side, arrow in-between.
-} -}
inc1 :: Integer -> Integer inc1 :: Integer -> Integer
inc1 n = n + 1 inc1 n = n + 1
@ -63,7 +63,7 @@ avg3Tupled ( x, y, z ) = (x + y + z) / 3
{- Evaluating with Tuples {- Evaluating with Tuples
We evaluate a function of several variables by providing We evaluate a function of several variables by providing
values *for each* input variabele. values *for each* input variable.
-} -}
four :: Float four :: Float
four = avg3Tupled ( 3, 4, 5 ) four = avg3Tupled ( 3, 4, 5 )
@ -159,7 +159,7 @@ compose :: (a -> b) -> (b -> c) -> a -> c
compose f g x = g (f x) compose f g x = g (f x)
{- Exercise {- Exercise
reimplement 'twice' and 'thrice' with as an application reimplement 'twice' and 'thrice' as an application
of the function 'compose'. of the function 'compose'.
-} -}
twiceByComp :: (a -> a) -> a -> a twiceByComp :: (a -> a) -> a -> a
@ -172,7 +172,7 @@ thriceByComp f = compose f (twiceByComp f)
A often used higher function is ``mapping'' of lists. A often used higher function is ``mapping'' of lists.
This function will apply a function (given as an This function will apply a function (given as an
argument) to every element in a list (also given as an argument) to every element in a list (also given as an
argument) and return a new list containig the changed argument) and return a new list containing the changed
values. There are a lot of other functions to work values. There are a lot of other functions to work
with lists (and similar types). We will learn about with lists (and similar types). We will learn about
these functions later. these functions later.

View file

@ -1,5 +1,5 @@
{- Contents {- Contents
A short integerroduction to Haskell; A short introduction to Haskell;
On how to create simple functions. On how to create simple functions.
-} -}
@ -10,7 +10,7 @@
{- General Syntax for functions {- General Syntax for functions
* Input on the left, output on the right. * Input on the left, output on the right.
* Functions also have a type: input type on the left * Functions also have a type: input type on the left
side, output type on the right side, arrow inbetween. side, output type on the right side, arrow in-between.
-} -}
inc1 :: Integer -> Integer inc1 :: Integer -> Integer
inc1 n = n + 1 inc1 n = n + 1
@ -40,10 +40,16 @@ someGreeting person = "Hello " ++ person
the lambda notation. the lambda notation.
-} -}
square :: Integer -> Integer square :: Integer -> Integer
square x = error "fixme" square x = x ^ 2
-- >>> square 3
-- 9
squareLambda :: Integer -> Integer squareLambda :: Integer -> Integer
squareLambda = error "fixme" squareLambda = \x -> x ^ 2
-- >>> squareLambda 4
-- 16
----------------------------------------------------------- -----------------------------------------------------------
@ -66,7 +72,7 @@ avg3Tupled ( x, y, z ) = (x + y + z) / 3
{- Evaluating with Tuples {- Evaluating with Tuples
We evaluate a function of several variables by providing We evaluate a function of several variables by providing
values *for each* input variabele. values *for each* input variable.
-} -}
four :: Float four :: Float
four = avg3Tupled ( 3, 4, 5 ) four = avg3Tupled ( 3, 4, 5 )
@ -108,12 +114,18 @@ add n m = n + m
add3 :: Int -> Int add3 :: Int -> Int
add3 = add 3 add3 = add 3
-- >>> add3 7
-- 10
{- Exercise {- Exercise
Declare a curried version of the function 'avg3Tupled' Declare a curried version of the function 'avg3Tupled'
as a lambda term. as a lambda term.
-} -}
avg3 :: Float -> Float -> Float -> Float avg3 :: Float -> Float -> Float -> Float
avg3 = error "fixme" avg3 = \x -> \y -> \z -> avg3Tupled (x, y, z)
-- >>> avg3 7 9 2
-- 6.0
{- Exercise {- Exercise
use the binary function '(++)' that concatenates strings use the binary function '(++)' that concatenates strings
@ -121,13 +133,15 @@ avg3 = error "fixme"
input string. Use partial application input string. Use partial application
-} -}
prepArrow :: String -> String prepArrow :: String -> String
prepArrow = error "fixme" prepArrow = (++) "=> "
-- When calling this -- When calling this
-- > prepArrow "foo" -- > prepArrow "foo"
-- It should output the following -- It should output the following
-- '=> foo' -- '=> foo'
-- >>> prepArrow "foo"
-- "=> foo"
----------------------------------------------------------- -----------------------------------------------------------
-- Higher Order Functions -- Higher Order Functions
@ -153,30 +167,33 @@ twice f x = f (f x)
times. times.
-} -}
thrice :: (a -> a) -> a -> a thrice :: (a -> a) -> a -> a
thrice f x = error "fixme" thrice f x = f (twice f x)
-- >>> thrice (\x -> x + 1) 10
-- 13
{- Exercise {- Exercise
Write a function 'compose' that accepts two functions Write a function 'compose' that accepts two functions
and applies them to a given argument in order. and applies them to a given argument in order.
-} -}
compose :: (a -> b) -> (b -> c) -> a -> c compose :: (a -> b) -> (b -> c) -> a -> c
compose f g x = error "fixme" compose f g x = g (f x)
{- Exercise {- Exercise
reimplement 'twice' and 'thrice' with as an application reimplement 'twice' and 'thrice' as an application
of the function 'compose'. of the function 'compose'.
-} -}
twiceByComp :: (a -> a) -> a -> a twiceByComp :: (a -> a) -> a -> a
twiceByComp f = error "fixme" twiceByComp f = compose f f
thriceByComp :: (a -> a) -> a -> a thriceByComp :: (a -> a) -> a -> a
thriceByComp f = error "fixme" thriceByComp f = compose f (twiceByComp f)
{- List map {- List map
A often used higher function is ``mapping'' of lists. A often used higher function is ``mapping'' of lists.
This function will apply a function (given as an This function will apply a function (given as an
argument) to every element in a list (also given as an argument) to every element in a list (also given as an
argument) and return a new list containig the changed argument) and return a new list containing the changed
values. There are a lot of other functions to work values. There are a lot of other functions to work
with lists (and similar types). We will learn about with lists (and similar types). We will learn about
these functions later. these functions later.
@ -202,5 +219,7 @@ greeting :: String -> String
greeting person = "Hello " ++ person greeting person = "Hello " ++ person
greetFriends :: [String] greetFriends :: [String]
greetFriends = error "fixme" greetFriends = map greeting friends
-- >>> greetFriends
-- ["Hello Peter","Hello Nina","Hello Janosh","Hello Reto","Hello Adal","Hello Sara"]