CS 457 Functional Languages
CRN 40966 CS 457 Functional Languages (4 cr) (undergraduate)
CRN 40979 CS 557 Functional Languages (3 cr) (graduate)
Time: Monday Wednesday 12:00-13:50
Room: LH 301
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:
- Describe the key characteristics of the functional paradigm.
- Use a functional language to write simple programs manipulating lists and trees.
- Use higher order functions, including maps, folds, and composition, to perform tasks on lists.
- Define algebraic datatypes to model useful domains.
- Define and use appropriate higher order functions on arbitrary algebraic data types.
- Illustrate how higher-order function values can be used to store data.
- Convert functional abstract data type specifications into implementations.
- Prove properties of simple functional programs using equational reasoning and induction.
- Explain and use polymorphic functions and data types, and interpret type error messages.
- Write functional programs that perform I/O, using either monadic or direct methods.
- Explain the differences between eager and lazy evaluation, and their significance.
- Write programs using simple infinite data structures.
- Explain the basic implementation considerations for a functional language.
- Design and implement a non-trivial application program in a functional language.
Major Topics:
Topics that we expect to cover include:
- Introduction, basic concepts, expressions, comprehensions, the standard prelude
- Examples: fractals; Excell Tables
- More about lists -- Library
- Defining functions
- Pattern matching
- Recursive definintions
- Algebraic Datatypes
- More on pattertn matching
- Trees and graph visualization via Graph Viz
- Music (as an example of a combinator library)
- Haskore
- Possibly some interaction with music TeX or similar
- Testing and reasoning
- Quick check
- Equational Reasoning
- Higher order functions
- Folds
- Church numerals (lambda calculator)
- Laziness, with possible examples including:
- memoization
- arrays and finite functions
- prime sieve
- DFS
- A rush hour puzzle solver
- Overloading and classes
- including a second look at the Excell and Quickcheck libraries
- Practical Applications, possibly including some of the following:
- Database and Internet applications (more combinators?)
- HTML combinators
- Graphics via OpenGL
None.
- Lecture notes and other supplementary material will be posted
on-line via the daily record.
- Many documents will be formatted as Microsoft Word (*.doc) or in
Adobe Portable Document Format (*.pdf). Be sure you can access and
print these kinds of documents. Free resources for these
kinds of documents include Open Office, and Adobe Reader.
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
- PSU Odin account and registration in the course. These will give
you D2L access, which is required for homework submission. If you don't have an account
you must get one immediately. You can do so online at:
https://www.account.pdx.edu/ After following those three steps you will
need to verify your identity at the help desk in the basement of Smith.
- Access to a computer with internet capability.
- Haskell Implmentation. A running implementation of Haskell. I recommend the Glasgow Haskell Compiler,
version 7.6.3 (or higher) and use of the GHCI interface. You should get and install the Haskell Platform.
It might be possible to use Hugs interpreter for the early assignments, but later assignments will require
the use of libraries, and it is necessary that all students to use the same libraries
not all of which are available under Hugs. I also think the GHCI error messages are better.
- Text. There is no required text for this class, but we have provided pointers to useful books and other reading material on the resources page.
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.
- 10% Class participation, including
- Attendance
- Class Participation and Discussion (blackboard work, code reviews, team activitites)
- 40% Weekly programming assignments
- 30% Midterm
- 20% Project (be done as small teams of 2-3 persons)
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
Disabilities
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/.