University of Surrey - Guildford
Registry
  
 

  
 
Registry > Module Catalogue
View Module List by A.O.U. and Level  Alphabetical Module Code List  Alphabetical Module Title List  Alphabetical Old Short Name List  View Menu 
2010/1 Module Catalogue
 Module Code: COM1022 Module Title: FUNCTIONAL PROGRAMMING AND REASONING
Module Provider: Computing Short Name: COM1022
Level: HE1 Module Co-ordinator: SCHAATHUN H Dr (Computing)
Number of credits: 20 Number of ECTS credits: 10
 
Module Availability
Autumn + Spring Semester
Assessment Pattern

Assessment Pattern

i) Unit(s) of Assessment

b) Weighting

Towards Module

Mark

2h Written Exam 60%

Programming coursework (an extensive program in Haskell)

(to be completed individually)

40%

Qualifying Conditions(s)

Average aggregate

Module Overview

Module Overview

Logical thinking and reasoning is essential in computer programming. This module aims

further to develop logical thinking from COM1006, first abstractly, and subsequently in

applications within the framework of functional programming in Haskell.

Through programming in the functional paradigm, the students will learn to use techniques

such as recursion and polymorphism in a clean and structured way, so that they

subsequently can use this techniques in other paradigms incl. object-oriented programming.

With the use of Unix-based workstations and a functional language this module will

familiarise the students with a broader range of computer architectures and paradigms.

Prerequisites/Co-requisites

Prerequisites/Co-requisites

The module assumes that the students read Foundations of Computing (COM1006) in

the same year.

The students should also have basic understanding and skill in imperative programming,

e.g. by taking Programming Fundamentals (COM1017).

Module Aims

Module aims

This module shall enable students to develop software in a structured and logical way,

including abstraction, modularisation, testing, and proof of correctness.

Learning Outcomes

Learning outcomes

At the end of the module, the students will

be able to work with standard command-line interfaces.

not explicitely assessed/prerequisite for further learning

write programs employing the fundamental features of Haskell.

to be assessed in the programming coursework

be able to make and use reusable functions as a fundamental building block of

software development.

 

 to be assessed in the programming coursework

understand recursion and polymorphism and be able to use them in simple algorithm

design. 

procedural understanding is assessed in the programming coursework; a deeper conceptual

understanding is assessed in the exam

be able to reason about computer programmes and argue their correctness

to be assessed in the exam

contrast functional and imperative languages and understand the advantages and

disadvantages of each.

 

 to be achieved through discussions in class

Module Content

Module content

Mathematical Induction and Reasoning

Program specification

Abstract Datatypes

Basics of the Unix User Interface

Basics of the Hugs User interface and the Haskell Syntax

Data types

Integers, Floats, Boleans

Strings

Lists

Recursion

Recursion over lists

Recursion over integers

Polymorphism

Algebraic datatypes

Polymorphic data types

Recursive data types

I/O in Haskell

Reasoning about programs

Application of Mathematical Induction

Implementing Abstract Data Types

Methods of Teaching/Learning

Methods of Teaching/Learning

29h of lectures/tutorials:

Autumn Week 7-9: 1h per week

Autumn Week 10-11: 3h per week

Spring Week 1-10 (11): 2h per week

15h of supervised lab with academic and demonstrator support. Weekly lab exercises

(1h) for 15 weeks (starting Week 7 of the Autumn semester). Additional

drop-in sessions with demonstrator support: 1h per week for 10 weeks.

 

 

 

 

 

Selected Texts/Journals

 Selected Texts/Journals

Core reading TBA. We have previously used Simon Thompson’s second edition (below).

A third edition has been expected for some time and will be used if it becomes available

in time. Otherwise, a different book may be considered.

3

You may find that you need a reference on Linux/Unix. The above two titles were the

best two I could find in the University Library. Sobell [?] is comprehensive and recent,

and may be a bit much for most students. The other [?] is shorter and possible more to

the point for our purpose; if you buy the book, you should look for a more recent edition.

 

 

 

 

Note. Graham Hutton’s book is a more basic alternative to Simon Thompson, and

contains just about the bare minimum for the module. The lectures will largely follow

the structure of Simon Thompson.

 

 

Last Updated

AUG 2010 JG