Reference Sheet for CO120.1 Programming I

Autumn 2016 This reference sheet does not cover many interesting types and classes, such as

Data.Maybe . catMaybes: Given list of Maybe values: Returns a list of all Just values. mapMaybe: Given function from value to Maybe value and list of values: Returns a list of all Just values from mapping function to list of values. Requires

Either, IO, Complex, and Monad. These are not included in the 120.1 syllabus,

but even a limited understanding of them may be helpful in examinations.

1

Bools

3

(&&) :: Bool -> Bool -> Bool (||) :: Bool -> Bool -> Bool not :: Bool -> Bool

2

fst :: (a , b ) -> a snd :: (a , b ) -> b

It is usually better to use pattern matching unless used with higher order functions.

Maybes

curry :: (( a , b ) -> c ) -> a -> b -> c uncurry :: a -> b -> c -> (a , b ) -> c

maybe :: b -> ( a -> b) -> Maybe a -> b

curry: Given uncurried function f (x, y): Returns curried function f x y . uncurry: Given curried function f x y : Returns uncurried function f (x, y).

Given default value, a function, and Maybe value: Returns default value if Maybe value is Nothing; Otherwise applies function to value inside Just.

swap :: (a , b ) -> (b , a )

isJust :: Maybe a -> Bool isNothing :: Maybe a -> Bool Requires

Tuples

Requires

4

Data.Maybe .

fromJust :: Maybe a -> a fromMaybe :: a - > Maybe a -> a

Data.Tuple .

Enums

succ :: a -> a pred :: a -> a

Data.Maybe . fromJust: Given a Maybe value: Returns value inside Just or error if Nothing. fromMaybe: Given default value and Maybe value: Returns value inside Just or default value if Nothing.

succ: Given a value: Returns its successor. pred: Given a value: Returns its predecessor.

Requires

[ n ..] [n ,n '..] [ n .. m ] [n ,n '.. m ]

catMaybes :: [ Maybe a ] -> [ a ] mapMaybe :: ( a -> Maybe b ) -> [ a ] -> [ b ]

1

Returns enum from n. Returns enum from n then n0 . Returns enum from n to m. Returns enum from n then n0 to m.

5

divMod: Simultaneous div and mod. gcd :: Integral a => a -> a -> a lcm :: Integral a => a -> a -> a

Numbers

5.4 Conversion between Numerical Types

5.1 Common Operators

round , ceiling , floor :: ( Floating a , Num b ) = > a -> b

round: Rounds to the closest integer, or even integer if closest integers are equidistant.

(+) , ( -) , (*) :: Num a = > a -> a -> a (/) :: Fractional a = > a -> a -> a (^) , (^^) :: ( Fractional a , Integral b ) = > a -> b -> a

fromIntegral :: ( Integral a , Num b ) a -> b

negate :: Num a = > a -> a recip :: Fractional a = > a -> a

6

abs :: Num a = > a -> a signum :: Num a = > a -> a

Characters

Requires

abs: Given a value, returns its absolute value. signum: Given a value, returns its sign.

Data.Char .

6.1 Classication

5.2 Mathematical Constants and Functions

isSpace isLower isUpper isAlpha isAlphaNum isDigit isPunctuation isSeparator

pi :: Floating a = > a exp , log , sqrt :: Floating a = > a -> a (**) , logBase :: Floating a = > a -> a -> a

log: Natural log. sin , cos , tan , asin , acos , atan :: Floating a = > a -> a

:: :: :: :: :: :: :: ::

Char Char Char Char Char Char Char Char

-> -> -> -> -> -> -> ->

Bool Bool Bool Bool Bool Bool Bool Bool

6.2 Case Conversion

In Radians.

5.3 Number Theoretical Functions

toUpper :: Char -> Char toLower :: Char -> Char

even :: Integral a = > a -> Bool odd :: Integral a = > a -> Bool

6.3 Numeric Conversion

div :: Num a = > a -> a -> a mod :: Num a = > a -> a -> a divMod :: Num a = > a -> a -> (a , a )

ord :: Char -> Int chr :: Int -> Char

2

7

Lists

7.1.2 Sublists

7.1 Working with Lists

take :: Int -> [ a ] -> [ a ] drop :: Int -> [ a ] -> [ a ] splitAt :: Int -> [ a ] -> ([ a ] , [ a ])

7.1.1 List Operations and Transformations (:) :: a -> [ a ] -> [ a ] (++) :: [ a ] -> [ a ] -> [ a ]

splitAt n xs: take n xs and drop n xs. takeWhile dropWhile span break

(:): Cons: Adds single element to beginning of a list. (++): Appends two lists. map :: ( a -> b ) -> [ a ] -> [ b ] filter :: ( a -> Bool ) -> [ a ] -> [ a ]

[a] [a] [a] [a]

-> -> -> ->

a a [a] [a]

Bool ) Bool ) Bool ) Bool )

-> -> -> ->

[a] [a] [a] [a]

-> -> -> ->

[a] [a] ([ a ] , [ a ]) ([ a ] , [ a ])

dropWhileEnd :: ( a -> Bool ) -> [ a] -> [ a ] Requires

holds.

head, last: Returns the rst, last element respectively. tail, init: Returns all elements but the rst, last respectively.

Data.List . Drops the largest sux of the list for which the predicate

stripPrefix :: [ a ] -> [ a ] -> Maybe [ a ] Requires Data.List . Drops the given prex from a list, or returns Nothing if the list did not start with the given prex.

null :: [ a ] -> Bool

Returns True if and only if the given list is empty.

group :: [ a ] -> [[ a ]]

reverse :: [ a ] -> [ a ]

Requires Data.List . Given a list; Returns a list of lists, that when concatenated reform the original list, and such that each sublist only contains equal elements.

intersperse :: a -> [ a ] -> [ a ] intercalate :: [ a ] -> [[ a ]] -> [ a ] Requires Data.List . intersperse: Given an element and a list: Returns a list with element inter-

inits :: [ a ] -> [[ a ]] tails :: [ a ] -> [[ a ]]

spersed between each element of the list. intercalate: Intersperses elements between each list in a set of lists.

Data.List . inits: Returns all initial segments, shortest rst. tails: Returns all nal segments, shortest rst. Requires

transpose :: [[ a ]] -> [[ a ]] Requires Data.List . E.g. [[1, 11, 1, 5], [2, 12, 2], [3, 13], [4]]

-> -> -> ->

span: Given a predicate and a list: Returns a tuple where the rst element is the longest prex of the list that satisfy the predicate and the second element is the remainder. break: As for span, but for the longest prex that does not satisfy the predicate.

works for all functor types). filter: Returns a list of elements for which a predicate holds. :: :: :: ::

(a (a (a (a

Don't forget to use takeWhile and dropWhile!

map: Maps a function over a list. The more general function fmap (inx <$>

head last tail init

:: :: :: ::

transpose [[1, 2, 3, 4], [11, 12], [1, 2, 13], [5]] =

7.1.3 Predicates

subsequences :: [ a ] -> [[ a ]] permutations :: [ a ] -> [[ a ]]

isPrefixOf isSuffixOf isInfixOf isSubsequenceOf

subsequences: Returns a list of all subsequences. permutations: Returns a list of all permutations.

3

:: :: :: ::

[a] [a] [a] [a]

-> -> -> ->

[a] [a] [a] [a ]

-> -> -> ->

Bool Bool Bool Bool

7.1.6 Zipping and Unzipping Lists

Requires Data.List . isPrefixOf: Returns True if the rst list is a prex of the second. isSuffixOf: Returns True if the rst list is a sux of the second. isInfixOf: Returns True if the rst list is contained, wholly and intact, in the

zip :: [ a ] -> [ b] -> [( a , b )] zip3 :: [ a ] -> [ b ] -> [ c ] -> [( a , b , c )]

second.

isSubsequenceOf: Returns True if the rst list is contained, in order, in the second (elements not necessarily consecutive).

zipWith :: ( a -> b -> c ) -> [ a ] -> [ b ] -> [ c ] zipWith3 :: ( a -> b -> c -> d ) -> [ a] -> [ b ] -> [c ] -> [ d ]

7.1.4 Indexing Lists

unzip :: [( a , b )] -> ([ a ] , [ b ]) unzip3 :: [( a , b , c )] -> ([ a ] , [ b ] , [ c ])

(!!) :: [ a ] -> Int -> a

Returns element at given index. elemIndex elemIndices findIndex findIndices

:: :: :: ::

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

7.2 Building Lists

Maybe Int [ Int ] -> [ a ] -> Maybe Int -> [ a ] -> [ Int ]

7.2.1 Building Lists scanr :: ( a -> b -> b ) -> b -> [ a ] -> [ b ] scanl :: ( b -> a -> b ) -> b -> [ a ] -> [ b ] scanr1 , scanl1 :: ( a -> a -> a ) -> [ a ] -> [ a ]

Requires Data.List . elemIndex, findIndex: Returns the index of the rst element in the given

Returns a list of successive values from respective fold function.

list that is equal to the given value, satises the given predicate respectively; Or returns Nothing if none exists. elemIndices, findIndices,: Returns the indices of all elements in the given list that are equal to the given value, satisfy the given predicate respectively.

unfoldr :: ( b -> Maybe (a , b )) -> b -> [ a ]

Given a function that produces a Maybe pair and a starting value; Applies the function to the starting value; If the function returns a Just pair, the rst element is added to the resulting list and the function is applied again to the second element; If the function returns Nothing, the resulting list is returned.

7.1.5 Searching Lists elem :: a -> [ a ] -> Bool notElem :: a -> [ a ] -> Bool

mapAccumR ( or L ) :: ( a -> b -> (a , c )) -> a -> [ b] -> (a , [ c ])

Given a function to a pair of an accumulator and a result, and a starting value for the accumulator; Returns a pair of the nal accumulator and the list of results.

elem, notElem: Returns True if the given element is, is not an element of the

given list respectively.

7.2.2 Innite Lists

lookup :: a -> [( a , b )] -> Maybe b

Looks up a key in a dictionary; Returns Nothing if key not found.

iterate repeat replicate cycle

find :: ( a -> Bool ) -> [ a ] -> Maybe a Requires Data.List . Returns the rst element that satises the predicate, or Nothing if none exists.

( a -> a ) -> a -> [ a ] a -> [ a ] Int -> a -> [ a ] [ a ] -> [ a ]

iterate: Returns an innite list of applications of a function to a starting

value.

partition :: ( a -> Bool ) -> [ a ] -> ([ a] , [ a ]) Requires

:: :: :: ::

repeat: Returns an innite list with each element of the given value. replicate: Returns a list of given length of a repeated element. cycle: Returns an innite list produced by cycling the given list.

Data.List . Returns the pair of lists of elements which do and do not

satisfy the predicate respectively.

4

7.3 Reducing Lists

delete :: a -> [ a ] -> [ a ] (\\) :: [ a ] -> [ a ] -> [ a ]

7.3.1 Folds foldr foldl foldr1 foldl1

:: :: :: ::

(a (b (a (a

-> -> -> ->

b a a a

-> -> -> ->

b) b) a) a)

-> -> -> ->

b -> [ a ] -> b b -> [ a ] -> b [ a ] -> a [ a ] -> a

Requires

union :: [ a ] -> [ a ] -> [ a ] intersect :: [ a ] -> [ a ] -> [ a ]

Don't forget to use folds!

Requires

Given a binary operator, starting value and list: Reduces list using the binary operator in the given direction, starting from the given starting value. e.g. foldr f x0 [x1 , x2 , x3 , . . . , xn ] = f x1 (f x2 (f x3 ( . . . (f xn x0 )))), and foldl f x0 [x1 , x2 , x3 , . . . , xn ] = (f (f (f (f x0 x1 ) x2 ) x3 ). . . xn ). fold1: Has no starting value.

sort :: [ a ] -> [ a ] Requires

Requires

tion.

Data.List . Sorts list by comparing values generated by given func-

insert :: a -> [ a ] -> [ a ]

maximum :: [ a ] -> a minimum :: [ a ] -> a

Requires

Data.List . Inserts element so that a sorted list remains sorted.

7.4.3 Functions on Strings

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

lines words unlines unwords

or, any: Returns True if True for any element. and, all: Returns True if True for all elements.

:: :: :: ::

String -> [ String ] String -> [ String ] [ String ] -> String [ String ] -> String

words: Breaks up into a list of words, delimited by white space. lines: Breaks up into a list of strings separated by newlines.

concat :: [[ a ]] -> [ a ] concatMap :: ( a -> [ b ]) -> [ a ] -> b

concat: Concatenates a list of lists into a list. concatMap: Maps a function, then concatenates result.

8

7.4 Special Lists

Functions

id :: a -> a const :: a -> b -> a asTypeOf :: a -> a -> a

7.4.1 Set Functions

id: Identity function. const: Evaluates to constant value for all inputs. asTypeOf: Forces rst argument to have the same type as the second.

nub :: [ a ] -> [ a ] Requires

Data.List . Sorts list.

sortOn :: ( a -> b ) -> [ a ] -> [ a ]

length :: [ a ] -> Int sum :: Num a = > [ a ] -> a product :: Num a = > [ a ] -> a

:: :: :: ::

Data.List . Returns union, intersection of two lists.

7.4.2 Ordered Lists

7.3.2 Special Folds

or and any all

Data.List . Deletes rst occurrence of given element, each element

of given list.

Data.List . Removes duplicates.

5

Where clauses Use instead of let statements to avoid computing something

(.) :: ( b -> c ) -> ( a -> b ) -> a -> c ( $ ) :: ( a -> b ) -> a -> b

multiple times or to clean up code.

Helper Functions Use helper functions to provide complicated functionality

(.): Function composition: (f.g) x = f (g x). Note the requirements for the

(e.g. creating a list and checking for convergence as it is created). Accumulating parameters are also particularly useful:

type and number of arguments. You can use this to combine two higher order functions into one. ($): Function application: f $ g $ h x = f (g(h x)). Often used to omit parentheses. To be avoided in general!

function input = function ' input startingAcc where function ' baseCase acc = acc function ' otherCase acc = function nextCase updatedAcc

flip :: ( a -> b -> c ) -> b -> a -> c

Use to invert arguments. Alternative to back-quotes or lambdas.

Lambdas Use as an alternative to higher-order functions for very complicated

until :: ( a -> Bool ) -> ( a -> a ) -> a -> a

functions.

Given a predicate and function; Applies function until predicate holds.

List comprehensions Often functions involving lists can be written using com-

error " Error string "

prehensions, recursion, or higher-order functions. Choose carefully.

Stops execution and displays error message.

9

[ f x | x <- xs , p ] = map f $ filter p xs

Types and Common Type Classes

Pattern matching Use often. Especially helpful for breaking up lists using : and for working with tuples. Don't forget to use _ and @ where appropriate.

Use data to dene a new data-type (you must dene type constructors), type to dene a type synonym, class to dene a new type-class, and instance to make a type an instance of a type-class. Don't forget you can use deriving in most cases. Example:

Guards Use instead of if ... then ... else statements. Tips for Lexis Tests ˆ Read instructions carefully. Don't rewrite a given function!

data Tree a = Empty | Leaf a | Node a ( Tree a ) ( Tree a ) deriving ( Show )

ˆ Be prepared to write very little for the rst questions and much more (helper

functions, etc.) towards the end. You should check your answers to the rst parts before beginning the last part. You should spend time planning your answer (on paper) for the last part.

Remember you can use :i in ghci for information about types and type-classes.

10

Syntactic Features and Good Practice

ˆ Aim rstly to get a working implementation, then consider optimisations.

Spacing Use proper spacing and alignment. Keep lines short.

ˆ Don't forget to use functions dened earlier in the program. ˆ Test often (using undefined where necessary to allow compilation) and read

Function Names Give functions meaningful names. Don't ever give two dif-

any error messages carefully.

ferent things the same name!

ˆ Make use of any provided test cases but do not rely upon them.

Comments Use to keep code ordered and to explain complicated functions.

ˆ Use an editor with syntax highlighting and ghci in terminal.

Begin with --. Multli-line comments use {- and -}.

ˆ Use :set -W to turn on warnings and :set -w to turn o warnings in ghci. Use :browse to see a list of all functions included in a module.

Multi-Line Strings End and start each line with \. 6

Reference Sheet for CO120.1 Programming I

Stops execution and displays error message. 9 Types and Common ... multiple times or to clean up code. ... You should spend time planning your answer (on ...

169KB Sizes 0 Downloads 276 Views

Recommend Documents

Reference Sheet for CO120.3 Programming III - GitHub
GBB. B d˜rief en enum type th—t represents fl—gs for renderingF. B. B i—™h ˜it represents — different fl—gF …se ˜itwise —nd. B to ™he™k if — fl—g is setF. BG enum render•fl—g {. GBB „he —m˜ient fl—g @˜it HAF BG

Reference Sheet for CO120.2 Programming II - GitHub
Implementing Interfaces Use notation: @Override when a class method im- ... Style: usually a class extends an abstract class (with constructor and fields).

Reference Sheet for CO142.1 Discrete Mathematics I - GitHub
Products For arbitrary sets A and B: 1. Ordered ... Identity idA = {〈x, y〉 ∈ A2|x = y}. Composition .... Identity: The function idA : A → A is defined as idA (a) = a. 3.

Oolite Reference Sheet - GitHub
will shut down, requiring a cool-down period before it ... 10 Fuel Scoop ... V2 & Creative Commons License: BY - NC - SA 3.0 Oolite Website: http:/www. ..... A discontinued fighter design finding a new life in the professional racing circuit.

Location Reference Sheet for writers.pdf
There was a problem previewing this document. Retrying... Download. Connect more apps... Try one of the apps below to open or edit this item. Location ...

Reference Sheet for CO140 Logic - GitHub
Free Variable Variable which is not bound (this includes variables which do not appear in A!). Sentence Formula with no free variables. ... domain of M, dom (M).

Reference Sheet for C112 Hardware - GitHub
Page 1 ... We might be able to make a considerable simplification by considering max- terms (0s) instead of minterms. • Don't cares (X) can ... Noise Margin. Fan out The number of inputs to which the output of a gate is connected. • Since 1. R.

Reference Sheet for CO130 Databases - GitHub
create table actor_cars ( .... Table. Relational Expression. Views. Tuple. Row. Attribute. Column. Domain .... end of free space, location and size of each record.

Reference Sheet for CO142.2 Discrete Mathematics II - GitHub
Connected: there is a path joining any two nodes. .... and merge two components .... Merge sort can be parallelised by executing recursive calls in parallel. 2.

Reference Sheet for CO141 Reasoning about Programs - GitHub
General Technique: For any P ⊆ Z and any m : Z: P (m) ∧ ∀k ≥ m. [P (k) → P (k + 1)] → ∀n ≥ m.P (n). 1.2 Strong Induction. P (0) ∧ ∀k : N. [∀j ∈ {0..k} .

V20 Reference Sheet-signed.pdf
Attacker rolls Dex + Stealth. Defender rolls Perc + Alertness. If attacker has more successes, attacker gets one free attack with. extra success from Ambush roll ...

Quick Reference Sheet v2.1.pdf
Overload Bonus 100% Armor HP 100%. Bomb/Smrt Bomb Dmg100% Signature Rad. -50%. Smart Bomb Rng 100% Small Wp. Dmg 200%. EWAR Types.

BIOLOGY EOC REFERENCE SHEET - Part 1
Linked Traits, Independent Assortment, Test Cross, Pedigrees, Punnett Squares .... influenced by crossing over, mutations, genetic engineering, random ...

BIOLOGY EOC REFERENCE SHEET - Part 1
overheating, moderating Earth's climate, stabilizing temperatures in aquatic ecosystems. Universal .... The scientific method is a way to ask and answer scientific ...

2017 June Sales Event Reference Sheet - BB version (2).pdf ...
Open Heart, Diamond 0.05 ct. $ 395. 750815. Wanderlust. $ 240. 750818 - clip. Floral Lucerne. $ 520 ... 35. 790975P. Guardian Angel, White Pearl. $ 40. 790989EN05. Lucky Cat, Pink Enamel. $ 35 ... 2017 June Sales Event Reference Sheet - BB version (2

Computer Basics Quick Reference, Computer Basics Cheat Sheet
It calculates and processes information, and its speed ... RAM (random-access memory): Computer's main memory, which is used to ... Networks and the Internet.

Introduction Quick Reference Guide (Cheat Sheet of ...
Shortcuts - Laminated Card). Book Detail : ... Register a free 1 month Trial Account. q. 2. ... Click the button below to register a free account and download the file.

Computer Basics Quick Reference, Computer Basics Cheat Sheet
which means unsaved data disappears when you shut off the computer. ROM (read-only memory): Computer's ... Terabyte (TB):. 1,099, 511,627,776 bytes.

2_DAAD_Information Sheet for Scholars_InCountry InRegion.pdf ...
2_DAAD_Information Sheet for Scholars_InCountry InRegion.pdf. 2_DAAD_Information Sheet for Scholars_InCountry InRegion.pdf. Open. Extract. Open with.