Elm exercise solutions
This post contains the solutions to exercises which could be found on Elm’s official page for version 0.15. Solutions are written for Elm 0.15.1.
1. Sum all of the elements of a tree.
sum : Tree Int -> Int
sum tree =
case tree of
Empty -> 0
Node value left right ->
value + (sum left) + (sum right)
2. Flatten a tree into a list.
Using List.append
import List exposing (append)
flatten : Tree a -> List a
flatten tree =
case tree of
Empty -> []
Node value left right ->
value :: append (flatten left) (flatten right)
Using List.concat
import List exposing (concat)
flatten : Tree a -> List a
flatten tree =
case tree of
Empty -> []
Node value left right ->
concat [ [value], flatten left, flatten right ]
3. Check to see if an element is in a given tree.
isElement : a -> Tree a -> Bool
isElement element tree =
case tree of
Empty -> False
Node value left right ->
if | value == element -> True
| otherwise -> (isElement element left || isElement element right)
Instead of otherwise you could also write:
if | value == element -> True
| value /= element -> (isElement element left || isElement element right)
Make sure to call it like this: display "isElement" (isElement 2) t2
4. Check to see if an element is in a given tree.
fold : (a -> b -> b) -> b -> Tree a -> b
fold func initialValue tree =
case tree of
Empty -> initialValue
Node value left right ->
func value (fold func (fold func initialValue right) left)
Alternative using local variables
fold : (a -> b -> b) -> b -> Tree a -> b
fold func initialValue tree =
case tree of
Empty -> initialValue
Node value left right ->
let sum = fold func rightSum left
rightSum = fold func initialValue right
in
func value sum