<?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" />
<meta name="copyright" content="Copyright &#169; 2008-2011 Péter Diviánszky" />
<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="#objectives">Objectives</a></li>
<li><a href="#assignments">Assignments</a></li>
<li><a href="#midterm-examination">Midterm 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>
<li><a href="#getting-help">Getting Help</a></li>
</ul>
</div>
<div class="section level1" id="basic-information">
<h1><a href="#basic-information">Basic Information</a></h1>
<ul>
<li>Lecturer: Gábor Páli, <code>pgj</code> at <code>elte</code> / <code>hu</code></li>
<li>Module Code: <code>IP-engFUNPEG/1</code> (lab)</li>
<li>Lab: Thursday, 8:30 – 10:00, 2.202, South Building</li>
<li>Duration: Spring 2013</li>
</ul>
</div>
<div class="section level1" id="prerequisitesassumed-knowledge">
<h1><a href="#prerequisitesassumed-knowledge">Prerequisites/Assumed Knowledge</a></h1>
<p>There are no prerequisites for this course.</p>
</div>
<div class="section level1" id="objectives">
<h1><a href="#objectives">Objectives</a></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>
</div>
<div class="section level1" id="assignments">
<h1><a href="#assignments">Assignments</a></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="#midterm-examination">midterm examination</a>.</em></p>
<p>The specifications will be posted in our <a href="https://pnyf.inf.elte.hu/bead">Electronic Submission System</a>. That system allows you to submit an assignment multiple times; only the last submission will be marked though.</p>
</div>
<div class="section level1" id="midterm-examination">
<h1><a href="#midterm-examination">Midterm Examination</a></h1>
<p>As part of the assessment, a two-hour midterm 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 midterm examination means failing the course.</strong></p>
</div>
<div class="section level1" id="final-examination">
<h1><a href="#final-examination">Final Examination</a></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>
</div>
<div class="section level1" id="schedule">
<h1><a href="#schedule">Schedule</a></h1>
<table>
<thead>
<tr class="header">
<th align="left">Event</th>
<th align="left">Date</th>
<th align="left">Place</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="left">Assignments</td>
<td align="left">Weekly</td>
<td align="left">-</td>
</tr>
<tr class="even">
<td align="left">Complex assignment announcement</td>
<td align="left">2013.05.03. (Friday), 14:00 (CEST)</td>
<td align="left">-</td>
</tr>
<tr class="odd">
<td align="left">Complex assignment deadline</td>
<td align="left">2013.05.23. (Friday), 09:59 (CEST)</td>
<td align="left">-</td>
</tr>
<tr class="even">
<td align="left">Midterm examination</td>
<td align="left">2013.05.23. (Thursday), 10:00 (CEST)</td>
<td align="left">Lovarda</td>
</tr>
<tr class="odd">
<td align="left">Midterm retake examination</td>
<td align="left">2013.05.30. (Thursday), 16:00 (CEST)</td>
<td align="left">Lovarda</td>
</tr>
<tr class="even">
<td align="left">Final examination</td>
<td align="left">2013.05.31. (Friday), 16:00 (CEST)</td>
<td align="left">Lovarda</td>
</tr>
</tbody>
</table>
</div>
<div class="section level1" id="course-material">
<h1><a href="#course-material">Course Material</a></h1>
<p>There are exercises and some basic explanation available <a href="Overview_en.xml#haskell-course-spring-2013">online</a>.</p>
<p>There is no dedicated textbook for the course. If you are interested or would like to clarify your understanding you can read:</p>
<ul>
<li><a href="http://learnyouahaskell.com/">Learn You a Haskell for Great Good</a></li>
</ul>
</div>
<div class="section level1" id="getting-help">
<h1><a href="#getting-help">Getting Help</a></h1>
<p>Questions regarding the course material and general administrative questions may be raised during the tutorial or in e-mail.</p>
</div>
<div><h1><a href="Overview_en.xml">Back to the main page</a></h1>
<p><em><a href="Overview_en.xml">Main page</a></em></p>
</div>
</body>
</html>

