CS 457 Functional Languages

CRN 41024 CS 457 Functional Languages (4 cr) (undergraduate)
CRN 41040 CS 557 Functional Languages (3 cr) (graduate)
Time: Tuesday Thursday 16:40-18:30
Room: OND 220
Instuctor: Tim Sheard

Course Description

Introduction to functional notation, recursion, higher-order functions, reasoning about functions, and models for the evaluation of applicative expressions. Use of functional languages.

Prerequisites: CS 202, 311.

Upon the successful completion of this course students will be able to:

  1. Describe the key characteristics of the functional paradigm.
  2. Use a functional language to write simple programs manipulating lists and trees.
  3. Use higher order functions, including maps, folds, and composition, to perform tasks on lists.
  4. Define algebraic datatypes to model useful domains.
  5. Define and use appropriate higher order functions on arbitrary algebraic data types.
  6. Illustrate how higher-order function values can be used to store data.
  7. Convert functional abstract data type specifications into implementations.
  8. Prove properties of simple functional programs using equational reasoning and induction.
  9. Explain and use polymorphic functions and data types, and interpret type error messages.
  10. Write functional programs that perform I/O, using either monadic or direct methods.
  11. Explain the differences between eager and lazy evaluation, and their significance.
  12. Write programs using simple infinite data structures.
  13. Explain the basic implementation considerations for a functional language.
  14. Design and implement a non-trivial application program in a functional language.

Major Topics:

Topics that we expect to cover include:

Texts for the Class


Course Website

The class web-page: http://web.cecs.pdx.edu/~sheard/course/CS457-557/ is an invaluable resource. Be sure and learn how to use it effectively.

The class webpage maintains a "Daily Record" which catalogs every class activity. Activities include lectures, reading assigments, writing assignments, projects, etc. These are catalogued by day, both when they are assigned and when they are due. You should check the daily record before every class.

Assignment submission procedure.

We will use the D2L system to electronically submit homework.

Things needed

Grading and Assignments

The course grade will be based upon a number of factors including short daily homeworks, weekly programming assignments, longer programming projects, a midterm, class participation (see below), and a final exam.

Work not turned in, unacceptable work or an unexcused absence from class when the work was done receives no credit. Excused absences requires that students make arrangements with the instructor to turn in missed work be turned in as soon as possible. It is your job to make arrangements with me.

Readiness to learn means that you will come to class with questions and insights to offer to others and be prepared to discuss the assigned reading. We will be learning from each other and your voice is important. Your participation grade will include attendance, participation in class discussions, participation in online discussions, and group work in class on smaller design problems and case studies.

Student Conduct/Plagiarism:

We follow the standard guidelines for academic integrity. For this course, it is perfectly acceptable for you to discuss the general concepts and principles behind an assignment with other students. In fact, you are encouraged to do this whenever possible, because it is often a valuable way to reinforce ideas, and to learn new perspectives. However, it is not proper, without prior authorization of the instructor, to arrive at collective solutions. In such a case, each student is expected to develop, write up, and hand in an individual solution and, in doing so, develop a sufficient understanding of the problem and solution so as to be able to explain it adequately to the instructor. Under no circumstances should a student copy or consult the completed solution of another student.

The following constitutes conduct proscribed by Portland State University for which a student or Recognized Student Organization or group is subject to disciplinary action:

Academic dishonesty. Academic dishonesty is the act of knowingly or intentionally seeking to claim credit for the work or effort of another person or participation in such acts. This includes, but is not limited to: (a) cheating, (b) fraud, (c) plagiarism, such as word for word copying, using borrowed words or phrases from original text into new patterns without attribution, or paraphrasing another writer's ideas; (d) The buying or selling of all or any portion of course assignments and research papers; (e) Performing academic assignments (including tests and examinations) for other persons; (f) Unauthorized disclosure or receipt of academic information; (g) Falsification of research data; and (h) Unauthorized collaboration.

Source: Office of Student Affairs at Portland State University, Code of Student Conduct and Responsibility. A copy of the full code can be found at http://www.pdx.edu/dos/codeofconduct. A copy can be obtained from The Office of Student Affairs at Smith Memorial Center Room 433.

Disability Resources


If you are a student with a document disability, who is registered with the Disability Resource Center, please contact the instructor to arrange any needed academic accomodations. For more information about the Disability Resource Center, see http://www.drc.pdx.edu/.