Category Archives: fun
Answering Exam Questions
Show in detail… If you’re required to show that something holds for a set of given functions, use certain base cases. For example in the 08-09 paper you are given some boolean algebra laws and asked to show that another … Continue reading
Interactive Haskell programs, a primer
Functions There are 3 important functions when dealing with interactive Haskell programs: interact interact takes a function of type String -> String, and the entire input from stdin is passed to this function as its input, and the resulting string … Continue reading
Proving Equivalences
We are asking the question How can we establish whether two functional expressions are equivalent (interchangeable)? You can’t just test across a few results/arguments; there may be an infinite number of possible arguments. Instead, you can use maths style proving … Continue reading
Instantiation and Strictness
Be careful when doing program transformation with regards to strictness. The problem is sometimes your function just passes a variable straight through as input. When this happens, ‘undefined’ can also be passed through just fine. But if you perform program … Continue reading
A Propositional Simplifier
We want to make something that derive clausal forms of formulae in propositional logic. Remember on the slides/notes that > means ‘implies’. | means or. You just do a specific sequence of actions to simplify. Can see this on the … Continue reading
Interactive Functional Programs
The important bit: Don’t think about sequence. Describe the whole expected output, and then use lazy evaluation to make this act ‘interactively’.
Infinite Data Structures
Functions are essentially infinite pairs of input and output, so why not have data with infinite components? Some examples The infinitely long list of spaces: white :: String — Remember a string is a list of characters white = ' … Continue reading
Removing Pointless Code
Lambda functions Backslash in Haskell is lambda, e.g. (\x c -> x == e || c) Removing pointless stuff Here’s an example: reverse xs = foldl snoc [] xs where snoc ys y = y : ys reverse = foldl … Continue reading
Locality
Summary Locality of names Generalisation as a programming tactic, and generalisation in Haskell. Local Definitions Haskell can support local definitions. I used this in the practical. It takes the form: equation where local equations You can also use let, not … Continue reading
Higher Order Functions
Recap about list reversal Something to bear in mind – if the list seems to be in the wrong order, use an accumulator to reverse as you go along. Higher order functions (with regards to generalisation) Remember that a higher … Continue reading