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