# CMPT 384 D1

## Course Synopsis

This course considers modelling and programming techniques appropriate for symbolic data domains such as mathematical expressions, logical formulas, grammars and programming languages. Topics include recursive and functional programming style, grammar-based data abstraction, simplification and reduction transformations, conversions to canonical form, environment data structures and interpreters, metaprogramming, pattern matching and theorem proving.

### Instructor's Objectives

Computer programs, English text, algebraic equations, musical scores and logical formulas are all examples of symbolic data domains. Programs that address many problems involving these domains carry out their tasks primarily by manipulating expressions in special purpose languages. This course will focus on one of the most important programming paradigms that provides convenient support for such programming applications: functional programming. In particular, the Haskell programming language designed to support this paradigm will be introduced to support the techniques used in addressing symbolic computing problems.

### Prerequisites

CMPT 225, and (MACM 101 or ENSC 251 and ENSC 252)).

## Topics

- Languages: expressions and grammars.
- Symbolic data: atoms, lists, structures.
- Principles of functional programming.
- Recursive programming and structural induction.
- Programs and grammars as data objects: metaprogramming.
- Algebraic expressions as data objects: symbolic math.
- Logical formulas as data objects: theorem proving and the basis of logic programming.
- Lexical analysis and parsing: interpreters

## Schedule

- Tuesdays: 13:30-14:20, BLU 9660, Sept. 4 - Nov. 27, 2018
- Thursdays: 12:30-14:20, AQ 3003, Sept. 6 - Nov. 29, 2018
- Final Exam: Sunday, Dec. 9, 2018, 12:00-15:00, SWH10081

## Contact Info and Office Hours

- Professor
- Rob Cameron
- email @sfu.ca: cameron
- Burnaby office: TASC 9215
- Office hours (Burnaby): Tuesday 10:00-11:00, Thursday 9:00-10:00
- Surrey office: Galleria 4178
- Surrey lab: Galleria 4120
- Open lab hours (Surrey): MWF 11:00-12:00

- TA
- Nigel Medforth
- email @sfu.ca: nmedfort
- Surrey lab: Galleria 4120
- Open lab hours (Surrey): MWF 1:00-2:00

## Grading

- Assignments, 40%; Midterm, 20%; Final Exam, 40%.

- Assignments and midterms are learning opportunities with feedback.
- If you study your mistakes and demonstrate improved knowledge
on the midterm or final, you can improve your mark:
- The midterm percentage replaces any lower assignment 1 or 2 mark.
- The final exam percentage replaces any lower assignment or midterm mark.

```
adjusted_mark (mark, out_of) final_percentage =
((max (mark/out_of) (final_percentage/100)) * out_of, out_of)
```

- Timeliness is important, but good work is even more important.
- Late policy for assignment 1: 2% per day, max 4 days.

- Final Exam: Sun. December 9 @ 12:00 noon - 3:00 pm, Room TBD.

- Alternative Project-Based Evaluation: Parabix/icgrep
- Start with the Parabix Familiarity Exercise
- Requires completion of Parabix assignment with > 80% mark.
- Requires > 80% on midterm exam.
- Requires an instructor-approved project proposal
- Grading basis: 20% Parabix assignment, 30% midterm, 50% final project.

## Notes

### Introduction

- Sep. 4, 2018
- Course Intro
- What is Symbolic Computing?
- Symbolic Computing Case Study: icgrep
- Haskell Notes and Resources

### The Regular Expression Domain and Simple Regular Expression Matching

- Sep. 6, 2018

- Sep. 11, 2018
- Class cancelled.
- Install Haskell.
- Download the Simpleton RE code.
- Try an interactive session.

- Sep. 18, 2018

- Sep. 20, 2018

- Sep. 25, 2018

- Sep. 27, 2018

### The Algebraic Expression Domain and Symbolic Differentation

- Sep. 27, 2018

- Oct. 2, 2018

- Oct. 4, 2018

- Oct. 9, 2018
- Parabix Familiarity Exercise
- Questions and Answers re Assignment 2
- Notes on Canonical Forms

### Symbolic Computing for Programming Languages

- Oct. 11, 2018

- Oct. 16, 2018

### Midterm Review

- Oct. 18, 2018

- Oct. 23, 2018
- Midterm Exam

- Oct. 25, 2018

### Symbolic Computing for Programming Languages (continued)

- Oct. 25, 2018

- Oct. 30, 2018

- Nov. 1, 2018
- Prettyprinting
- Interpreter and Assignment 3 discussion

### Symbolic Logic Formulas, Theorem Proving

- Nov. 6, 2018
- Nov. 8, 2018

- Nov. 13, 2018
- Nov. 15, 2018

- Nov. 20, 2018

- Nov. 27, 2018

### Final Review

- Nov. 29, 2018

- Dec. 6, 2018