TIEA341 Functional Programming 1 (1–5 cr)

Study level:
Intermediate studies
Grading scale:
0-5
Language:
English, Finnish
Responsible organisation:
Faculty of Information Technology
Curriculum periods:
2020-2021, 2021-2022, 2022-2023, 2023-2024

Description

This course covers the basics of functional programming, including expressions: expression formation and reduction, variables: variable scope and binding, procedures: procedure calls and side effects, recursion: classification of recursive processes, functions: higher-order and anonymous functions, and abstractions: modeling abstractions with functional control and data structures.


The course is primarily completed by handing in the assignments on time. Alternatively, the course may be completed by taking an exam, which will be held on the first general examination date, unless no one signs up for it. It should be noted that taking the exam is a much harder way to get a good grade than any of the other options.


We calculate a rough summative assessment of the assignments or exam, which we use to determine the grade. Time permitting, we shall also give formative feedback on assignments, which does not affect the grade.


Learning outcomes

On this course, we will study what untyped (that is, dynamically typed) functional programming looks like and what it is good for. The goal of this course is not to make you into a top notch application developer, but rather to give you deeper insights into the basic elements of programming, and to build you a sufficient foundation for later exploring typed (that is, statically typed) functional programming without tears. On the side, this course also offers you an excellent excuse to try out new tools and ways of working.

Description of prerequisites

This course does not have absolute prerequisites in the form of other courses. However, participants are expected to have basic computer skills, a reasonable level of mathematical maturity and a healthy attitude towards work. Mathematical maturity does not only make the course easier to complete, but also helps make connections with topics that are covered in greater depth on other courses.

Study materials

Sampsa Kiiskinen. “TIEA341: Funktio-ohjelmointi”. Eprint: kurssit/tie/tiea341/2023s. TIM, 2023-08-15. URL: https://tim.jyu.fi/view/kurssit/tie/tiea341/2023s/koti


Literature:


Harold Abelson and Gerald Jay Sussman with Julie Sussman. “Structure and Interpretation of Computer Programs”. Foreword by Alan Jay Perlis. Edited by Neil Van Dyke and Andres Raba. 2nd Edition: Cambridge, Massachusetts and London, England, 1996. URL: https://mitp-content-server.mit.edu/books/content/sectbyfn/books_pres_0/6515/sicp.zip/full-text/book/book.html

Harold Abelson and Gerald Jay Sussman with Julie Sussman. “Structure and Interpretation of Computer Programs”. Foreword by Alan Jay Perlis. Edited by Neil Van Dyke and Andres Raba. 2.6.6th Edition: GitHub, 2015. URL: https://sarabander.github.io/sicp/

Dorai Sitaram. “Teach Yourself Scheme in Fixnum Days”. Cover Art by Margaret Wong. 1st Edition: GitHub, 2015. URL: https://ds26gte.github.io/tyscheme/

Hal Abelson et al. “Revised⁵ Report on the Algorithmic Language Scheme”. Edited by Richard Kelsey and William Clinger and Jonathan Rees. 1998-02-20. URL: https://people.csail.mit.edu/jaffer/r5rs/

Panicz Maciej Godek. “SRFI-200: Pattern Matching”. In: Scheme Requests for Implementation 200 (2022-03-23). URL: https://srfi.schemers.org/srfi-200/srfi-200.html

Jesse Alama et al. “raco: Racket Command-Line Tools”. Version 8.9: Racket, 2023-05-15. URL: https://docs.racket-lang.org/raco/

Urs Schreiber et al. “Monad”. Revision 117: nLab, 2023-08-13. URL: https://ncatlab.org/nlab/revision/monad/117

Completion methods

Method 1

Select all marked parts
Parts of the completion methods
x

Teaching (1–5 cr)

Type:
Participation in teaching
Grading scale:
0-5
Language:
English, Finnish

Teaching