Starting from:
$35

$29

Homework 2 Solved

Problem 1:
----------

Implement the following functions:

a) filterFirst :: (a -> Bool) -> [a] -> [a]

so that filterFirst p xs removes the first element of xs which does not
satisfy the property p. For instance,

  filterFirst even [1,2,3,4] ~~> [2,3,4]

b) filterLast :: (a -> Bool) -> [a] -> [a]

so that filterLast p xs removes the last element of xs which does not
satisfy the property p. For instance,

  filterLast even [1,2,3,4] ~~> [1,2,4]

c) split :: [a] -> ([a],[a])

so that split will split a list into two lists, picking elements 
alternately.  For instance,

  split [1,2,3,0,4] ~~> ([1,3,4],[2,0])

d) interleave :: ([a],[a]) -> [a]

so that interleave will interleave two lists. For instance,

  interleave ([1,3,4],[2,0]) ~~> [1,2,3,0,4]

e) merge :: (Ord a) => ([a],[a]) -> [a]

so that merge merges two sorted lists to produce a sorted list. 
For instance,

  merge ([1,2,3],[4,5]) = [1,2,3,4,5]

f) mergeSort :: (Ord a) => [a] -> [a]

so that it realizes the mergesort algorithm. You have to use your 
functions split (c) and merge (e).
  
Problem 2
---------

a) Implement the functions 

  option :: RegExp -> RegExp

  plus :: RegExp -> RegExp

where option e matches zero or one occurrence of the pattern e, and 
plus e matches one or more occurrences of the pattern e.

b) Define regular expressions which match

- strings of digits which begin with a non-zero digit

- fractional numbers: two strings of digits separated by '.';
  make sure that these numbers have no superfluous zeros at the beginning or
  at the end, so exclude strings like "01.34" and "1.20"

These are the exercises 12.16 and 12.17 of the book "Haskell - the craft
of functional programming" by Simpson Thompson (Third edition)

http://www.haskellcraft.com/

More products