<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> 
<head>
<title>Functional Programming</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="pandoc" />
<link rel="shortcut icon" href="icon.ico" />
<script src="common_en.js" charset="utf-8" type="text/javascript"></script> 
<link rel="stylesheet" href="common.css" type="text/css" />
</head>
<body onload="javascript:resetForms(); javascript:slidy_init();">
<div><h1 class="cover">Functional Programming</h1>
<div id="info"></div>
<ul>
<li><a href="#basic-information">Basic Information</a></li>
<li><a href="#prerequisitesassumed-knowledge">Prerequisites/Assumed Knowledge</a></li>
<li><a href="#getting-help">Getting Help</a></li>
<li><a href="#objectives">Objectives</a></li>
<li><a href="#assignments">Assignments</a></li>
<li><a href="#practical-examination">Practical Examination</a></li>
<li><a href="#final-examination">Final Examination</a></li>
<li><a href="#schedule">Schedule</a></li>
<li><a href="#course-material">Course Material</a></li>
</ul>
</div>
<section id="basic-information" class="level1">
<h1>Basic Information</h1>
<ul>
<li>Lecturer: Jeff Epstein, <code>jeff</code> at <code>inf.elte.hu</code></li>
<li>Lecturer’s office: D-2.616</li>
<li>Module Code: <code>IP-engFUNPEG/1</code> (lab)</li>
<li>Lab: Friday, 10:00 – 12:00, 2.123, South Building</li>
<li>Duration: Spring 2014</li>
</ul>
</section>
<section id="prerequisitesassumed-knowledge" class="level1">
<h1>Prerequisites/Assumed Knowledge</h1>
<p>There are no prerequisites for this course. However, programming experience may be helpful.</p>
</section>
<section id="getting-help" class="level1">
<h1>Getting Help</h1>
<p>If you are having difficulty with the course material, you are encouraged to contact your lecturer as soon as possible. You can get help in various ways:</p>
<ul>
<li>During class.</li>
<li>By email.</li>
<li>At lecturer’s consultation in his office.</li>
</ul>
<p>Participation in class is mandatory. All students are encouraged to ask questions and make suggestions during class time.</p>
<p>It is your responsibility to keep up with the course material. Ask for help before it’s too late!</p>
<p>The lecturer’s contact information is available at the top of this page.</p>
</section>
<section id="objectives" class="level1">
<h1>Objectives</h1>
<p>After completing this course, you should</p>
<ul>
<li>Understand the following concepts:
<ul>
<li>Expressions (function application, variables, literals, Booleans, lists, tuples, characters).</li>
<li>Function definitions (patterns, guards, recursion, local definitions).</li>
<li>Type of expressions and functions (function type, basic types, type of lists and tuples, parametric and ad-hoc polymorphism, type classes).</li>
<li>Higher-order functions (sections, lambda expression, function composition, folds).</li>
<li>Data types (type synonyms, parametric and recursive algebraic data types).</li>
<li>Basic program transformation steps.</li>
<li>Other theoretical concepts (lazy evaluation, static typing, strong type system, purity, equational reasoning).</li>
</ul></li>
<li>Be able to employ the concepts above in software development.</li>
<li>Be able to use the GHCi interpreter for developing small functional programs; understand the error messages of the interpreter.</li>
</ul>
<p>The course exposes students to pure functional programming. It develops basic skills required to define pure functions and data types.</p>
</section>
<section id="assignments" class="level1">
<h1>Assignments</h1>
<p>The learning focus in this course is primarily on lab work and assignments. While the assignments are not graded, they contribute to the final mark, their primary purpose is to facilitate learning by hands-on experience.</p>
<p>There will be lab assignments for each week. Students will have about one week to work with each individual assignment and to submit a solution.</p>
<p>Completing and submitting all assignments is compulsory. You will have to make a reasonable effort to complete the assignments. A “reasonable effort” means that there may be mistakes in your solution, but you must submit an at least partially working piece of adequately structured code. <strong>If you miss more than 3 assignments you will not pass</strong>.</p>
<p><em>Around end of April, there will be a complex assignment posted that has to be solved and submitted in order to write a <a href="#practical-examination">practical examination</a>.</em></p>
<p>The specifications will be posted in our <a href="https://bead.inf.elte.hu/">Electronic Submission System</a>. That system allows you to submit an assignment multiple times; only the last submission will be marked though.</p>
</section>
<section id="practical-examination" class="level1">
<h1>Practical Examination</h1>
<p>As part of the assessment, a two-hour practical examination has to be passed. It involves solving algorithmic problems on a computer by using the functional programming tools and techniques learnt during the semester. Optionally, it is possible to retake the examination once if it was not successful the first time. <strong>Failing the practical examination means failing the course.</strong></p>
</section>
<section id="final-examination" class="level1">
<h1>Final Examination</h1>
<p>The final examination is a three-hour combined written and oral test. Requests for retake will only be considered where students (a) have completed all other course components to a satisfactory standard, (b) have been absent from the final exam.</p>
<p>The final examination of this course will be held at the beginning of examination session in May – it is based on demonstrating your functional programming skills by solving algorithmic problems, first on a computer then defending your solution by presenting it.</p>
<p>If needed, a retake examination will be held soon after the results have been published.</p>
</section>
<section id="schedule" class="level1">
<h1>Schedule</h1>
<table>
<thead>
<tr class="header">
<th style="text-align: left;">Event</th>
<th style="text-align: left;">Date</th>
<th style="text-align: left;">Place</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;">Assignments</td>
<td style="text-align: left;">Weekly</td>
<td style="text-align: left;">-</td>
</tr>
<tr class="even">
<td style="text-align: left;">Complex assignment announcement</td>
<td style="text-align: left;">2014.04.25. (Friday), 14:00 (CEST)</td>
<td style="text-align: left;">-</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Complex assignment deadline</td>
<td style="text-align: left;">2014.05.09. (Friday), 14:00 (CEST)</td>
<td style="text-align: left;">-</td>
</tr>
<tr class="even">
<td style="text-align: left;">Practical examination</td>
<td style="text-align: left;">2014.05.07. (Wednesday), 14:00 (CEST)</td>
<td style="text-align: left;">Lovarda (south building 0-308)</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Practical examination retake</td>
<td style="text-align: left;">2014.05.16. (Friday), 16:00 (CEST)</td>
<td style="text-align: left;">Lovarda (south building 0-308)</td>
</tr>
<tr class="even">
<td style="text-align: left;">Final examination</td>
<td style="text-align: left;">2014.05.23. (Friday), 10:00 (CEST)</td>
<td style="text-align: left;">Lovarda (south building 0-308)</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Final examination retake</td>
<td style="text-align: left;">2014.06.19. (Thursday), 12:00 (CEST)</td>
<td style="text-align: left;">Lovarda (south building 0-308)</td>
</tr>
</tbody>
</table>
</section>
<section id="course-material" class="level1">
<h1>Course Material</h1>
<p>There is no official textbook for the course. However, for additional learning, or for clarifying important concepts, we recommend:</p>
<ul>
<li><a href="http://learnyouahaskell.com/">Learn You a Haskell for Great Good</a></li>
</ul>
<p>You can find additional helpful resources here:</p>
<ul>
<li><a href="http://book.realworldhaskell.org/read/">Real World Haskell</a></li>
<li><a href="http://www.haskell.org/">Official Haskell web page</a></li>
<li>Haskell library documentation: <a href="http://www.haskell.org/ghc/docs/latest/html/libraries/">Hierarchical</a> and <a href="http://www.haskell.org/hoogle/">Hoogle</a></li>
</ul>
</section>
</body>
</html>

