CPSC 370 — Functional and Logic Programming — Fall 2018 
  This page summarises information about CPSC 370.
  
  - Prerequisites
 
  - 
    A grade of C-
    or better in  cpsc 141
    and  cpsc 281;
    or permission of instructor.
  
 
  - Important Information
 
  - 
    
      Important information may be posted here from time to time.
    
    
      - 2018-11-30
 
      - Homework due dates adjusted; Question 9 corrected.
 
      - 2018-11-05
 
      - Homework due dates adjusted.
 
      - Notes on monads posted.
 
      - 2018-10-23
 
      - Final examination date posted.
 
- 2018-10-09
 
      - Links updated.  Sets and Currying worksheet link added.
 
      - 2018-07-13
 
      - No news is good news
 
    
   
  - Accommodations
 
- 
  
Students in this course who, because of a disability, may
have a need for special academic accommodations should discuss
this with the instructor, or contact
the Access Resource
      Centre
located in the Teaching & Learning Building in Room 10-1048.
  
 
  - Room and Hours
 
  - M W F
  11:30-12:20 in 5-159.
 
-  Grading Scheme1 and Dates:
 
  -  
    
        
      
        | What | When | Value | 
      
      
        | First Class | Wed, Sep 05         |  | 
        | Thanksgiving |  Mon, Oct 08         |  | 
        | Midterm I |  Fri, Oct 12         | 20% | 
        | Last Drop Day |  Thu, Oct 25         |  | 
        | Midterm II | Fri, Nov 16         | 20% | 
        | Remembrance Day | Mon, Nov 12         |  | 
        | Course Evaluation | Mon, Nov 26         |  | 
        | Last Class | Fri, Nov 30         |  | 
            | Homework |  from time to time
           | 25% | 
        | Final |  
            Mon, Dec 10  (5-155) |  
              | 18:00–21:00 |   
         | 35% | 
    
   
- Programming Assigments
 
    - There will be approximately weekly programming assignments
during the semester.  Programming languages
      include Scheme,
      Prolog 
      and Haskell.
    
      
        See the homework link on the menu-bar.
      
      
  
  - Times
 
    - Times can be found
        on David
        Casperson’s Schedule also linked on the right.
    
 
  
  - Handouts
 
    - 
    
    
 
  
  - References
 
  - There is no required text.
  
 
  - Blackboard
 
- Approximate Course Content
 
    - 
        
          
          - An introduction to functional programming.  Static and dynamic
            typing.  Strict and non-strict evaluation.
            
Pure
 versus impure
 functional programming. 
      
          -  Some common functional programning languages. 
 
          - Functions and partial functions. 
 
          - Cartesian products.  Disjoint unions.
            
Currying
.
           
          
 
        - Haskell.
 
        
            - Builtin types and literals.  Tuples. Lists.
 
            -  Declarations.  Function declarations and function
              values.
 
            - Datatypes.
 
            - Exploiting laziness. Downsides to laziness.
 
            - Recursion, tail recursion, and accumulator
              arguments.
 
            - Monadic programming.
 
        
 
        - Scheme 
 
        
            - 
        Space and time complexity for functional programs and data
        structures.
        
 
 
          - Prolog.
 
          
            - 
        An introduction to logic
        programming. 
 
            
            - Facts. Rules.
              Goals.  Variables.  Conjunctions.  Horn Clauses.  
 
            - The
              Unification algorithm.
 
            - Accumulator
              arguments.
 
            - Difference lists.
 
            - Cuts.
              Negation.
 
            - Arithmetic.
 
            - Debugging.
 
 
        
 
  - Links
 
  
  - Notes
 
  - 
    
      - 
            I reserve the right to change the weight of any portion of
            this marking scheme. If changes are made, your grade will be
            calculated using the original weighting and the new
            weighting, and you will be given the higher of the two.