<?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>Magasabbrendű függvények bevezetés</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">Magasabbrendű függvények bevezetés</h1>
<div id="info"></div>
<ul>
<li><a href="#szeletek">Szeletek</a></li>
<li><a href="#feladat-prelude.map">Feladat: <code>Prelude.map</code> [*]</a></li>
<li><a href="#feladat-prelude.filter">Feladat: <code>Prelude.filter</code> [*]</a></li>
<li><a href="#feladat-számlálás">Feladat: Számlálás</a></li>
<li><a href="#feladat-prelude.takewhile">Feladat: <code>Prelude.takeWhile</code> [*]</a></li>
<li><a href="#feladat-prelude.dropwhile">Feladat: <code>Prelude.dropWhile</code></a></li>
<li><a href="#feladat-prelude.span">Feladat: <code>Prelude.span</code></a></li>
<li><a href="#feladat-prelude.iterate">Feladat: <code>Prelude.iterate</code> [*]</a></li>
<li><a href="#feladat-a-dollár-operátor">Feladat: A dollár operátor [*]</a></li>
<li><a href="#feladat-prelude.all">Feladat: <code>Prelude.all</code></a></li>
<li><a href="#feladat-prelude.any">Feladat: <code>Prelude.any</code> [*]</a></li>
<li><a href="#feladat-prelude.elem">Feladat: <code>Prelude.elem</code></a></li>
<li><a href="#feladat-több-elem-szűrése">Feladat: Több elem szűrése</a></li>
<li><a href="#feladat-prelude.zipwith">Feladat: <code>Prelude.zipWith</code> [*]</a></li>
<li><a href="#feladat-különbségsorozat">Feladat: Különbségsorozat [*]</a></li>
<li><a href="#névtelen-függvények">Névtelen függvények</a></li>
<li><a href="#feladat-fibonacci-párok">Feladat: Fibonacci párok [*]</a></li>
<li><a href="#feladat-data.list.group">Feladat: <code>Data.List.group</code></a></li>
<li><a href="#feladat-ismétlődő-elemeket-tartalmazó-lista-tömörítése">Feladat: Ismétlődő elemeket tartalmazó lista tömörítése</a></li>
<li><a href="#feladat-pascal-háromszög">Feladat: Pascal-háromszög</a></li>
<li><a href="#feladat-négyzetgyök-számolás-newton-módszerrel">Feladat: Négyzetgyök számolás Newton-módszerrel</a></li>
<li><a href="#feladat-prelude.uncurry">Feladat: <code>Prelude.uncurry</code> [*]</a></li>
<li><a href="#feladat-kitömörítés">Feladat: Kitömörítés [*]</a></li>
<li><a href="#feladat-súlyozott-összeg">Feladat: Súlyozott összeg</a></li>
</ul>
</div>
<section id="szeletek" class="level1">
<h1>Szeletek</h1>
<p>A szeletek operátorokból képzett (egyparaméteres) függvények, például <code>(&lt; 3)</code>, <code>(^2)</code>, <code>(4 *)</code>.</p>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','7cb45a1c42a29936ee58bb4f011d715d','7cb45a1c42a29936ee58bb4f011d715d');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea7cb45a1c42a29936ee58bb4f011d715d" value=":t (^2)" /><br /><div class="answer" id="res7cb45a1c42a29936ee58bb4f011d715d"><code class="result">(^2)</code><code> :: </code><code class="type">Num a =&gt; a -&gt; a</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','59bc72db2b19960d28f7873ca7a21e8e','59bc72db2b19960d28f7873ca7a21e8e');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea59bc72db2b19960d28f7873ca7a21e8e" value="(^2) 3" /><br /><div class="answer" id="res59bc72db2b19960d28f7873ca7a21e8e"><code class="result">9</code><code> :: </code><code class="type">Integer</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','5c7576eac846f1e64dea28cf34f1c23f','5c7576eac846f1e64dea28cf34f1c23f');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea5c7576eac846f1e64dea28cf34f1c23f" value="(2^) 3" /><br /><div class="answer" id="res5c7576eac846f1e64dea28cf34f1c23f"><code class="result">8</code><code> :: </code><code class="type">Integer</code></div></form>
<div class="handout">
<hr />
<p>A magasabbrendű függvényeket függvényekkel lehet paraméterezni. A szeletek jól használhatók magasabbrendű függvényekkel.</p>
<p><em>Megjegyzés.</em> A <code>(-4)</code> a <code>-4</code> számot jelenti. A néggyel csökkentés szelete a <code>(+(-4))</code> kifejezés.</p>
</div>
</section>
<section id="feladat-prelude.map" class="level1">
<h1>Feladat: <code>Prelude.map</code> [*]</h1>
<p>Definiáljuk újra rekurzióval az elemenkénti feldolgozást!</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb1-1" data-line-number="1">map<span class="ot"> ::</span> (a <span class="ot">-&gt;</span> b) <span class="ot">-&gt;</span> [a] <span class="ot">-&gt;</span> [b]</a></code></pre></div>
<div class="indent"><form class="interpreter" action="javascript:getOne('c=check&amp;f=Higherorder_3d4330f31676ab595e95623d62a285be.hs','3d4330f31676ab595e95623d62a285be','3d4330f31676ab595e95623d62a285be');"><textarea cols="80" rows="4" id="tarea3d4330f31676ab595e95623d62a285be"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="res3d4330f31676ab595e95623d62a285be"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','e6673d2c4b05760252548dbe9598d8cb','e6673d2c4b05760252548dbe9598d8cb');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareae6673d2c4b05760252548dbe9598d8cb" value="map (+1)      [1..5]" /><br /><div class="answer" id="rese6673d2c4b05760252548dbe9598d8cb"><code class="result">[2, 3, 4, 5, 6]</code><code> :: </code><code class="type">[Integer]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','bed25a68c7bfc974db717f13860928c4','bed25a68c7bfc974db717f13860928c4');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareabed25a68c7bfc974db717f13860928c4" value="map (^2)      [1..5]" /><br /><div class="answer" id="resbed25a68c7bfc974db717f13860928c4"><code class="result">[1, 4, 9, 16, 25]</code><code> :: </code><code class="type">[Integer]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','1f9d3ecb8fc8449136130c7f859ceac2','1f9d3ecb8fc8449136130c7f859ceac2');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea1f9d3ecb8fc8449136130c7f859ceac2" value="map (2^)      [1..5]" /><br /><div class="answer" id="res1f9d3ecb8fc8449136130c7f859ceac2"><code class="result">[2, 4, 8, 16, 32]</code><code> :: </code><code class="type">[Integer]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','acc4ff14ac2184a485045d06b3cf0cdc','acc4ff14ac2184a485045d06b3cf0cdc');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareaacc4ff14ac2184a485045d06b3cf0cdc" value="map (`mod` 2) [1..5]" /><br /><div class="answer" id="resacc4ff14ac2184a485045d06b3cf0cdc"><code class="result">[1, 0, 1, 0, 1]</code><code> :: </code><code class="type">[Integer]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','69abfe63f4ff3cb10d780569eaba78fb','69abfe63f4ff3cb10d780569eaba78fb');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea69abfe63f4ff3cb10d780569eaba78fb" value="map even [1..5] " /><br /><div class="answer" id="res69abfe63f4ff3cb10d780569eaba78fb"><code class="result">[False, True, False, True, False]</code><code> :: </code><code class="type">[Bool]</code></div></form>
<p><em>Megjegyzés.</em> A <code>map</code> függvényt így is lehetne definiálni: <code>map f l = [f e | e &lt;- l]</code>.</p>
</section>
<section id="feladat-prelude.filter" class="level1">
<h1>Feladat: <code>Prelude.filter</code> [*]</h1>
<p>Definiáljuk újra rekurzióval a szűrést!</p>
<div class="sourceCode" id="cb2"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb2-1" data-line-number="1">filter<span class="ot"> ::</span> (a <span class="ot">-&gt;</span> <span class="dt">Bool</span>) <span class="ot">-&gt;</span> [a] <span class="ot">-&gt;</span> [a]</a></code></pre></div>
<div class="indent"><form class="interpreter" action="javascript:getOne('c=check&amp;f=Higherorder_f932d680f654261139c024eeeca81ece.hs','f932d680f654261139c024eeeca81ece','f932d680f654261139c024eeeca81ece');"><textarea cols="80" rows="6" id="tareaf932d680f654261139c024eeeca81ece"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="resf932d680f654261139c024eeeca81ece"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','1147bef146da40fa6d510fb39eed96be','1147bef146da40fa6d510fb39eed96be');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea1147bef146da40fa6d510fb39eed96be" value="filter even [1..10] " /><br /><div class="answer" id="res1147bef146da40fa6d510fb39eed96be"><code class="result">[2, 4, 6, 8, 10]</code><code> :: </code><code class="type">[Integer]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','4f06c46882b61e32aa15135b99cffd5c','4f06c46882b61e32aa15135b99cffd5c');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea4f06c46882b61e32aa15135b99cffd5c" value="filter (4&lt;) [1..10]" /><br /><div class="answer" id="res4f06c46882b61e32aa15135b99cffd5c"><code class="result">[5, 6, 7, 8, 9, 10]</code><code> :: </code><code class="type">[Integer]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','d5167a8bd038b531f6e48f540c8a0548','d5167a8bd038b531f6e48f540c8a0548');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="taread5167a8bd038b531f6e48f540c8a0548" value="filter (&lt;4) [1..10]" /><br /><div class="answer" id="resd5167a8bd038b531f6e48f540c8a0548"><code class="result">[1, 2, 3]</code><code> :: </code><code class="type">[Integer]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','e01c3cf122c66814a80c57cab174958b','e01c3cf122c66814a80c57cab174958b');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareae01c3cf122c66814a80c57cab174958b" value="filter (/= 3) [1,2,3,4,5,4,3,2,1] " /><br /><div class="answer" id="rese01c3cf122c66814a80c57cab174958b"><code class="result">[1, 2, 4, 5, 4, 2, 1]</code><code> :: </code><code class="type">[Integer]</code></div></form>
<p><em>Megjegyzés.</em> A <code>filter</code> függvényt így is lehetne definiálni: <code>filter p l = [e | e &lt;- l, p e]</code>.</p>
</section>
<section id="feladat-számlálás" class="level1">
<h1>Feladat: Számlálás</h1>
<p>Számoljuk meg egy adott tulajdonságú elem előfordulásait egy listában!</p>
<div class="sourceCode" id="cb3"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb3-1" data-line-number="1"><span class="ot">count ::</span> (a <span class="ot">-&gt;</span> <span class="dt">Bool</span>) <span class="ot">-&gt;</span> [a] <span class="ot">-&gt;</span> <span class="dt">Int</span></a></code></pre></div>
<div class="indent"><form class="interpreter" action="javascript:getOne('c=check&amp;f=Higherorder_e02929cdc58bad651c10fb3a3cf49bd8.hs','e02929cdc58bad651c10fb3a3cf49bd8','e02929cdc58bad651c10fb3a3cf49bd8');"><textarea cols="80" rows="3" id="tareae02929cdc58bad651c10fb3a3cf49bd8"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="rese02929cdc58bad651c10fb3a3cf49bd8"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','daab24376d21ffe48fe32f81a685bdf6','daab24376d21ffe48fe32f81a685bdf6');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareadaab24376d21ffe48fe32f81a685bdf6" value="count (==3) [1,2,3,4,5,4,3,2,1] " /><br /><div class="answer" id="resdaab24376d21ffe48fe32f81a685bdf6"><code class="result">2</code><code> :: </code><code class="type">Int</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','9ecb082700c472d3b4c5d9476361ddb5','9ecb082700c472d3b4c5d9476361ddb5');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea9ecb082700c472d3b4c5d9476361ddb5" value="count (&quot;alma&quot; `isPrefixOf`) (words &quot;almafa alma nem alma&quot;) " /><br /><div class="answer" id="res9ecb082700c472d3b4c5d9476361ddb5"><code class="result">3</code><code> :: </code><code class="type">Int</code></div></form>
</section>
<section id="feladat-prelude.takewhile" class="level1">
<h1>Feladat: <code>Prelude.takeWhile</code> [*]</h1>
<p>Definiáljuk újra a <code>takeWhile</code> függvényt!</p>
<div class="sourceCode" id="cb4"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb4-1" data-line-number="1">takeWhile<span class="ot"> ::</span> (a <span class="ot">-&gt;</span> <span class="dt">Bool</span>) <span class="ot">-&gt;</span> [a] <span class="ot">-&gt;</span> [a]</a></code></pre></div>
<div class="indent"><form class="interpreter" action="javascript:getOne('c=check&amp;f=Higherorder_9ad872702f8d7b3c18c283ed3bb2c232.hs','9ad872702f8d7b3c18c283ed3bb2c232','9ad872702f8d7b3c18c283ed3bb2c232');"><textarea cols="80" rows="4" id="tarea9ad872702f8d7b3c18c283ed3bb2c232"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="res9ad872702f8d7b3c18c283ed3bb2c232"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','92a37f2ac6a95af6c54a2238447a181f','92a37f2ac6a95af6c54a2238447a181f');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea92a37f2ac6a95af6c54a2238447a181f" value="takeWhile (&lt;5) [1,2,3,4,5,6,5,4,3,2]" /><br /><div class="answer" id="res92a37f2ac6a95af6c54a2238447a181f"><code class="result">[1, 2, 3, 4]</code><code> :: </code><code class="type">[Integer]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','3c6ba51e6eb964eba4bb4ca0881d20dd','3c6ba51e6eb964eba4bb4ca0881d20dd');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea3c6ba51e6eb964eba4bb4ca0881d20dd" value="takeWhile (&lt;500) (map (^2) [1..])" /><br /><div class="answer" id="res3c6ba51e6eb964eba4bb4ca0881d20dd"><code class="result">[1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225,
 256, 289, 324, 361, 400, 441, 484]</code><code> :: </code><code class="type">[Integer]</code></div></form>
</section>
<section id="feladat-prelude.dropwhile" class="level1">
<h1>Feladat: <code>Prelude.dropWhile</code></h1>
<p>Definiáljuk újra a <code>dropWhile</code> függvényt!</p>
<div class="sourceCode" id="cb5"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb5-1" data-line-number="1">dropWhile<span class="ot"> ::</span> (a <span class="ot">-&gt;</span> <span class="dt">Bool</span>) <span class="ot">-&gt;</span> [a] <span class="ot">-&gt;</span> [a]</a></code></pre></div>
<div class="indent"><form class="interpreter" action="javascript:getOne('c=check&amp;f=Higherorder_83d6c8292f3e42ef0c0bb212454bba79.hs','83d6c8292f3e42ef0c0bb212454bba79','83d6c8292f3e42ef0c0bb212454bba79');"><textarea cols="80" rows="4" id="tarea83d6c8292f3e42ef0c0bb212454bba79"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="res83d6c8292f3e42ef0c0bb212454bba79"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','72250d63c16fb9493cbed34c5d18f675','72250d63c16fb9493cbed34c5d18f675');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea72250d63c16fb9493cbed34c5d18f675" value="dropWhile (&lt;5) [1,2,3,4,5,6,5,4,3,2]" /><br /><div class="answer" id="res72250d63c16fb9493cbed34c5d18f675"><code class="result">[5, 6, 5, 4, 3, 2]</code><code> :: </code><code class="type">[Integer]</code></div></form>
</section>
<section id="feladat-prelude.span" class="level1">
<h1>Feladat: <code>Prelude.span</code></h1>
<p>Definiáljuk újra a <code>span</code> függvényt, amely lényegében a következő módon adható meg:</p>
<pre><code>span p xs = (takeWhile p xs, dropWhile p xs)</code></pre>
<p>Készítsünk ennél hatékonyabb definíciót!</p>
<div class="sourceCode" id="cb7"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb7-1" data-line-number="1">span<span class="ot"> ::</span> (a <span class="ot">-&gt;</span> <span class="dt">Bool</span>) <span class="ot">-&gt;</span> [a]<span class="co">{-véges-}</span> <span class="ot">-&gt;</span> ([a],[a])</a></code></pre></div>
<div class="indent"><form class="interpreter" action="javascript:getOne('c=check&amp;f=Higherorder_6463561461a76eacebf0671eedb72d82.hs','6463561461a76eacebf0671eedb72d82','6463561461a76eacebf0671eedb72d82');"><textarea cols="80" rows="7" id="tarea6463561461a76eacebf0671eedb72d82"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="res6463561461a76eacebf0671eedb72d82"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','c2629333ece4fb2a4ce4530de79b2c84','c2629333ece4fb2a4ce4530de79b2c84');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareac2629333ece4fb2a4ce4530de79b2c84" value="span (&lt; 3) [1,2,3,4,1,2,3,4]" /><br /><div class="answer" id="resc2629333ece4fb2a4ce4530de79b2c84"><code class="result">([1, 2], [3, 4, 1, 2, 3, 4])</code><code> :: </code><code class="type">([Integer], [Integer])</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','e9c6248237fdba161e8296bc3b1c25e2','e9c6248237fdba161e8296bc3b1c25e2');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareae9c6248237fdba161e8296bc3b1c25e2" value="span (&lt; 9) [1,2,3]" /><br /><div class="answer" id="rese9c6248237fdba161e8296bc3b1c25e2"><code class="result">([1, 2, 3], [])</code><code> :: </code><code class="type">([Integer], [Integer])</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','db5599f6f5f9b33104c84ecf9de805f0','db5599f6f5f9b33104c84ecf9de805f0');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareadb5599f6f5f9b33104c84ecf9de805f0" value="span (&lt; 0) [1,2,3]" /><br /><div class="answer" id="resdb5599f6f5f9b33104c84ecf9de805f0"><code class="result">([], [1, 2, 3])</code><code> :: </code><code class="type">([Integer], [Integer])</code></div></form>
</section>
<section id="feladat-prelude.iterate" class="level1">
<h1>Feladat: <code>Prelude.iterate</code> [*]</h1>
<p>Definiáljuk újra az <code>iterate</code> függvényt!</p>
<div class="sourceCode" id="cb8"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb8-1" data-line-number="1">iterate<span class="ot"> ::</span> (a <span class="ot">-&gt;</span> a) <span class="ot">-&gt;</span> a <span class="ot">-&gt;</span> [a]  </a></code></pre></div>
<div class="indent"><form class="interpreter" action="javascript:getOne('c=check&amp;f=Higherorder_5cdc93bfcb027573613460832021415f.hs','5cdc93bfcb027573613460832021415f','5cdc93bfcb027573613460832021415f');"><textarea cols="80" rows="3" id="tarea5cdc93bfcb027573613460832021415f"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="res5cdc93bfcb027573613460832021415f"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','625de6bd41e627affb3f1601b53760bb','625de6bd41e627affb3f1601b53760bb');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea625de6bd41e627affb3f1601b53760bb" value="take 10 (iterate (*2) 1)" /><br /><div class="answer" id="res625de6bd41e627affb3f1601b53760bb"><code class="result">[1, 2, 4, 8, 16, 32, 64, 128, 256, 512]</code><code> :: </code><code class="type">[Integer]</code></div></form>
<p><em>Megjegyzés.</em> A függvény alkalmazásának eredménye egy végtelen lista.</p>
</section>
<section id="feladat-a-dollár-operátor" class="level1">
<h1>Feladat: A dollár operátor [*]</h1>
<p>Definiáljuk a dollár operátort!</p>
<div class="sourceCode" id="cb9"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb9-1" data-line-number="1"><span class="kw">infixr</span> <span class="dv">0</span> <span class="fu">$</span></a>
<a class="sourceLine" id="cb9-2" data-line-number="2"><span class="ot">($) ::</span> (a <span class="ot">-&gt;</span> b) <span class="ot">-&gt;</span> a <span class="ot">-&gt;</span> b</a></code></pre></div>
<div class="indent"><form class="interpreter" action="javascript:getOne('c=check&amp;f=Higherorder_73e2ade5f121391163cbbc46a7b394e0.hs','73e2ade5f121391163cbbc46a7b394e0','73e2ade5f121391163cbbc46a7b394e0');"><textarea cols="80" rows="3" id="tarea73e2ade5f121391163cbbc46a7b394e0"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="res73e2ade5f121391163cbbc46a7b394e0"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','614e7f31e44684fa7f974cab43f7a13f','614e7f31e44684fa7f974cab43f7a13f');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea614e7f31e44684fa7f974cab43f7a13f" value="concat $ map (take $ 1) $ [&quot;alma&quot;, &quot;barack&quot;, &quot;datolya&quot;]" /><br /><div class="answer" id="res614e7f31e44684fa7f974cab43f7a13f"><code class="result">&quot;abd&quot;</code><code> :: </code><code class="type">[Char]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','b692058722faa34ad2ce01cce907bd25','b692058722faa34ad2ce01cce907bd25');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareab692058722faa34ad2ce01cce907bd25" value="sin $ cos $ 4 + log 1" /><br /><div class="answer" id="resb692058722faa34ad2ce01cce907bd25"><code class="result">-0.6080830096407656</code><code> :: </code><code class="type">Double</code></div></form>
<div class="handout">
<hr />
<p>A dollár operátor használatával alapvetően zárójelpárokat spórolhatunk meg. De tulajdonképpen minden olyan esetben jól jön, amikor a függvényalkalmazás operátorát akarjuk explicite alkalmazni, például:</p>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','1e6db88d36469b4504db49b464ceab17','1e6db88d36469b4504db49b464ceab17');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea1e6db88d36469b4504db49b464ceab17" value="map ($ 10) [sqrt, (* 2), (^2)]" /><br /><div class="answer" id="res1e6db88d36469b4504db49b464ceab17"></div></form>
<p>A dollár operátor jobbra kötő 0 erősségű operátor, ezért <code>sin $ cos $ 4 + log 1</code> helyes zárójelezése <code>sin $ (cos $ (4 + log 1))</code>. A dollár definíciója szerint ,,nem csinál semmit’’, így a végeredmény <code>sin (cos (4 + log 1))</code>.</p>
<p><em>Megjegyzés.</em> Az <code>1 + sin (2 + 3)</code> helyett nem írhatjuk hogy <code>1 + sin $ 2 + 3</code>, mert ez a következő (hibás) kifejezést rövidíti: <code>(1 + sin) (2 + 3)</code>.</p>
</div>
</section>
<section id="feladat-prelude.all" class="level1">
<h1>Feladat: <code>Prelude.all</code></h1>
<p>Definiáljuk újra az univerzális kvantort!</p>
<div class="sourceCode" id="cb10"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb10-1" data-line-number="1">all<span class="ot"> ::</span> (a <span class="ot">-&gt;</span> <span class="dt">Bool</span>) <span class="ot">-&gt;</span> [a]<span class="co">{-véges-}</span> <span class="ot">-&gt;</span> <span class="dt">Bool</span></a></code></pre></div>
<div class="indent"><form class="interpreter" action="javascript:getOne('c=check&amp;f=Higherorder_b0497ce123f2166956e633c57b9bc0d5.hs','b0497ce123f2166956e633c57b9bc0d5','b0497ce123f2166956e633c57b9bc0d5');"><textarea cols="80" rows="4" id="tareab0497ce123f2166956e633c57b9bc0d5"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="resb0497ce123f2166956e633c57b9bc0d5"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','8cf92762d774d851845c90379e805dbb','8cf92762d774d851845c90379e805dbb');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea8cf92762d774d851845c90379e805dbb" value="all even [2,4..10]" /><br /><div class="answer" id="res8cf92762d774d851845c90379e805dbb"><code class="result">True</code><code> :: </code><code class="type">Bool</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','14b8b250e98c360edfa064a3d71ebad6','14b8b250e98c360edfa064a3d71ebad6');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea14b8b250e98c360edfa064a3d71ebad6" value="not $ all even [1..10]" /><br /><div class="answer" id="res14b8b250e98c360edfa064a3d71ebad6"><code class="result">True</code><code> :: </code><code class="type">Bool</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','69091fafc61fe70a99e42c64b71e7ee2','69091fafc61fe70a99e42c64b71e7ee2');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea69091fafc61fe70a99e42c64b71e7ee2" value="not $ all even [1,3..10]" /><br /><div class="answer" id="res69091fafc61fe70a99e42c64b71e7ee2"><code class="result">True</code><code> :: </code><code class="type">Bool</code></div></form>
</section>
<section id="feladat-prelude.any" class="level1">
<h1>Feladat: <code>Prelude.any</code> [*]</h1>
<p>Definiáljuk újra az egzisztenciális kvantort!</p>
<div class="sourceCode" id="cb11"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb11-1" data-line-number="1">any<span class="ot"> ::</span> (a <span class="ot">-&gt;</span> <span class="dt">Bool</span>) <span class="ot">-&gt;</span> [a]<span class="co">{-véges-}</span> <span class="ot">-&gt;</span> <span class="dt">Bool</span></a></code></pre></div>
<div class="indent"><form class="interpreter" action="javascript:getOne('c=check&amp;f=Higherorder_9cd6e09bd920df3e558c2487dac3e9b7.hs','9cd6e09bd920df3e558c2487dac3e9b7','9cd6e09bd920df3e558c2487dac3e9b7');"><textarea cols="80" rows="4" id="tarea9cd6e09bd920df3e558c2487dac3e9b7"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="res9cd6e09bd920df3e558c2487dac3e9b7"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','a1e18084ed6237a816a8b411a60125c1','a1e18084ed6237a816a8b411a60125c1');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareaa1e18084ed6237a816a8b411a60125c1" value="any even [1..10]" /><br /><div class="answer" id="resa1e18084ed6237a816a8b411a60125c1"><code class="result">True</code><code> :: </code><code class="type">Bool</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','74cd9c80bf5bd61bf12e1f7a594befd0','74cd9c80bf5bd61bf12e1f7a594befd0');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea74cd9c80bf5bd61bf12e1f7a594befd0" value="not $ any even [1,3..10]" /><br /><div class="answer" id="res74cd9c80bf5bd61bf12e1f7a594befd0"><code class="result">True</code><code> :: </code><code class="type">Bool</code></div></form>
</section>
<section id="feladat-prelude.elem" class="level1">
<h1>Feladat: <code>Prelude.elem</code></h1>
<p>Definiáljuk újra az <code>elem</code> függvényt (az <code>any</code> segítségével), amely megállapítja, hogy egy érték szerepel-e egy listában!</p>
<div class="sourceCode" id="cb12"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb12-1" data-line-number="1">elem<span class="ot"> ::</span> <span class="dt">Eq</span> a <span class="ot">=&gt;</span> a <span class="ot">-&gt;</span> [a]<span class="co">{-véges-}</span> <span class="ot">-&gt;</span> <span class="dt">Bool</span></a></code></pre></div>
<div class="indent"><form class="interpreter" action="javascript:getOne('c=check&amp;f=Higherorder_460fd8107c1462d157089ba4c15e62ec.hs','460fd8107c1462d157089ba4c15e62ec','460fd8107c1462d157089ba4c15e62ec');"><textarea cols="80" rows="4" id="tarea460fd8107c1462d157089ba4c15e62ec"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="res460fd8107c1462d157089ba4c15e62ec"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','7173dbe0142f71e53192191f62517603','7173dbe0142f71e53192191f62517603');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea7173dbe0142f71e53192191f62517603" value="elem 1 [1..10]" /><br /><div class="answer" id="res7173dbe0142f71e53192191f62517603"><code class="result">True</code><code> :: </code><code class="type">Bool</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','7fa92a32278117f5dab1742ae19ca47f','7fa92a32278117f5dab1742ae19ca47f');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea7fa92a32278117f5dab1742ae19ca47f" value="not $ elem 0 [1..10]" /><br /><div class="answer" id="res7fa92a32278117f5dab1742ae19ca47f"><code class="result">True</code><code> :: </code><code class="type">Bool</code></div></form>
</section>
<section id="feladat-több-elem-szűrése" class="level1">
<h1>Feladat: Több elem szűrése</h1>
<p>Szűrjünk ki adott elemeket egy listából!</p>
<div class="sourceCode" id="cb13"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb13-1" data-line-number="1"><span class="ot">filters ::</span> <span class="dt">Eq</span> a <span class="ot">=&gt;</span> [a] <span class="ot">-&gt;</span> [a] <span class="ot">-&gt;</span> [a]</a></code></pre></div>
<div class="indent"><form class="interpreter" action="javascript:getOne('c=check&amp;f=Higherorder_64c07ca63e69371cbb8f7aec2c89f26c.hs','64c07ca63e69371cbb8f7aec2c89f26c','64c07ca63e69371cbb8f7aec2c89f26c');"><textarea cols="80" rows="3" id="tarea64c07ca63e69371cbb8f7aec2c89f26c"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="res64c07ca63e69371cbb8f7aec2c89f26c"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','377e50c8e4920edac0fbee7e7203656f','377e50c8e4920edac0fbee7e7203656f');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea377e50c8e4920edac0fbee7e7203656f" value="filters &quot;?!.,:;&quot; &quot;Szia, hogy vagy?&quot; " /><br /><div class="answer" id="res377e50c8e4920edac0fbee7e7203656f"><code class="result">&quot;Szia hogy vagy&quot;</code><code> :: </code><code class="type">[Char]</code></div></form>
<p><em>Megjegyzés.</em> Van <code>notElem</code> függvény is.</p>
</section>
<section id="feladat-prelude.zipwith" class="level1">
<h1>Feladat: <code>Prelude.zipWith</code> [*]</h1>
<p>Definiáljuk újra a <code>zipWith</code> függvényt!</p>
<div class="sourceCode" id="cb14"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb14-1" data-line-number="1">zipWith<span class="ot"> ::</span> (a <span class="ot">-&gt;</span> b <span class="ot">-&gt;</span> c) <span class="ot">-&gt;</span> [a] <span class="ot">-&gt;</span> [b] <span class="ot">-&gt;</span> [c]</a></code></pre></div>
<div class="indent"><form class="interpreter" action="javascript:getOne('c=check&amp;f=Higherorder_f68046b55d1dbc1e2d991ca3f48c8d32.hs','f68046b55d1dbc1e2d991ca3f48c8d32','f68046b55d1dbc1e2d991ca3f48c8d32');"><textarea cols="80" rows="4" id="tareaf68046b55d1dbc1e2d991ca3f48c8d32"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="resf68046b55d1dbc1e2d991ca3f48c8d32"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','c83d07fc79da3ebf8f3556cc0207e30b','c83d07fc79da3ebf8f3556cc0207e30b');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareac83d07fc79da3ebf8f3556cc0207e30b" value="zipWith (+) [1,2,3,4,5] [5,6,7,8]" /><br /><div class="answer" id="resc83d07fc79da3ebf8f3556cc0207e30b"><code class="result">[6, 8, 10, 12]</code><code> :: </code><code class="type">[Integer]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','db4ca02a264b3490e99b1a1381ddd5af','db4ca02a264b3490e99b1a1381ddd5af');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareadb4ca02a264b3490e99b1a1381ddd5af" value="zipWith (,) [1,2,3] &quot;hello&quot;" /><br /><div class="answer" id="resdb4ca02a264b3490e99b1a1381ddd5af"><code class="result">[(1, 'h'), (2, 'e'), (3, 'l')]</code><code> :: </code><code class="type">[(Integer, Char)]</code></div></form>
<div class="handout">
<hr />
<p>A párok egyetlen konstruktora:</p>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','a92bf010f3535a776129dfa0b261ed0c','a92bf010f3535a776129dfa0b261ed0c');"><div class="answer" id="resa92bf010f3535a776129dfa0b261ed0c"><code class="result">(,)</code><code> :: </code><code class="type">a -&gt; b -&gt; (a, b)</code></div></form>
<p>Noha írhatjuk azt, hogy <code>(,) 2 'c'</code>, ehelyett inkább <code>(2,'c')</code>-t szokás írni. Néha kifejezetten hasznos a <code>(,)</code> jelölés. Például a <code>zip</code> egy lehetséges definíciója:</p>
<div class="sourceCode" id="cb15"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb15-1" data-line-number="1">zip <span class="fu">=</span> zipWith (,)</a></code></pre></div>
</div>
</section>
<section id="feladat-különbségsorozat" class="level1">
<h1>Feladat: Különbségsorozat [*]</h1>
<p>A <code>zipWith</code> felhasználásával készítsünk egy olyan függvényt, amely számok egy sorozatából előállítja azok páronkénti különbségeinek sorozatát!</p>
<div class="sourceCode" id="cb16"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb16-1" data-line-number="1"><span class="ot">differences ::</span> <span class="dt">Num</span> a <span class="ot">=&gt;</span> [a] <span class="ot">-&gt;</span> [a]</a></code></pre></div>
<div class="indent"><form class="interpreter" action="javascript:getOne('c=check&amp;f=Higherorder_1bb008b4d23d2c3026547c4e1324f763.hs','1bb008b4d23d2c3026547c4e1324f763','1bb008b4d23d2c3026547c4e1324f763');"><textarea cols="80" rows="4" id="tarea1bb008b4d23d2c3026547c4e1324f763"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="res1bb008b4d23d2c3026547c4e1324f763"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','46932c98e3d1188111304b80576eaab7','46932c98e3d1188111304b80576eaab7');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea46932c98e3d1188111304b80576eaab7" value="differences [1..5]" /><br /><div class="answer" id="res46932c98e3d1188111304b80576eaab7"><code class="result">[1, 1, 1, 1]</code><code> :: </code><code class="type">[Integer]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','1fa2f771f92deaa26e31f53f77e1436f','1fa2f771f92deaa26e31f53f77e1436f');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea1fa2f771f92deaa26e31f53f77e1436f" value="differences [5,4..1]" /><br /><div class="answer" id="res1fa2f771f92deaa26e31f53f77e1436f"><code class="result">[-1, -1, -1, -1]</code><code> :: </code><code class="type">[Integer]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','bb007fa42d999fd118b245d88c0979c3','bb007fa42d999fd118b245d88c0979c3');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareabb007fa42d999fd118b245d88c0979c3" value="differences [0,1,4,9,16]" /><br /><div class="answer" id="resbb007fa42d999fd118b245d88c0979c3"><code class="result">[1, 3, 5, 7]</code><code> :: </code><code class="type">[Integer]</code></div></form>
</section>
<section id="névtelen-függvények" class="level1">
<h1>Névtelen függvények</h1>
<p>Matematikai minta: x ↦ x + 1 (hozzárendelési szabály)</p>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','9f807181915b9a48b49cdea791389c56','9f807181915b9a48b49cdea791389c56');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea9f807181915b9a48b49cdea791389c56" value="\x -&gt; x + 1           -- ugyanaz, mint a (+ 1)" /><br /><div class="answer" id="res9f807181915b9a48b49cdea791389c56"></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','0e9b888b74bb9c51596835ba8719a8c4','0e9b888b74bb9c51596835ba8719a8c4');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea0e9b888b74bb9c51596835ba8719a8c4" value="\x -&gt; 2 * x + 1" /><br /><div class="answer" id="res0e9b888b74bb9c51596835ba8719a8c4"></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','9a8b4a3cb326ae86620a07a839c07442','9a8b4a3cb326ae86620a07a839c07442');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea9a8b4a3cb326ae86620a07a839c07442" value="\x -&gt; x `mod` 2 == 0  -- ugyanaz, mint az even" /><br /><div class="answer" id="res9a8b4a3cb326ae86620a07a839c07442"></div></form>
<p>A változó tetszőleges kisbetűs név lehet.</p>
<div class="handout">
<hr />
<p>Az új változó elfedhet külső változókat vagy függvényeket:</p>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','767d955f4cf80b6522f43f59fb5d09fd','767d955f4cf80b6522f43f59fb5d09fd');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea767d955f4cf80b6522f43f59fb5d09fd" value="\pi -&gt; pi + 1         -- ugyanaz, mint a (+ 1)" /><br /><div class="answer" id="res767d955f4cf80b6522f43f59fb5d09fd"></div></form>
<p>Jó tanács: Névtelen függvényekben mindig egybetűs változóneveket használjunk.</p>
<p>Minden szelet egyszerűen átírható névtelen függvénnyé; a fordító is ezt teszi.</p>
<table>
<tbody>
<tr class="odd">
<td style="text-align: left;"><code>( +1)</code></td>
<td style="text-align: center;">≡</td>
<td style="text-align: left;"><code>\x -&gt; x + 1</code></td>
</tr>
<tr class="even">
<td style="text-align: left;"><code>( `mod`5)</code></td>
<td style="text-align: center;">≡</td>
<td style="text-align: left;"><code>\x -&gt; x `mod` 5</code></td>
</tr>
<tr class="odd">
<td style="text-align: left;"><code>(2^)</code></td>
<td style="text-align: center;">≡</td>
<td style="text-align: left;"><code>\x -&gt; 2 ^ x</code></td>
</tr>
</tbody>
</table>
<p>A szeletek használata mindenütt javasolt, ahol lehetséges.</p>
</div>
</section>
<section id="feladat-fibonacci-párok" class="level1">
<h1>Feladat: Fibonacci párok [*]</h1>
<p>Állítsuk elő a (0,1), (1,1), (1,2), (2,3), (3,5), (5,8), … (végtelen) sorozatot! A sorozat előállítási szabálya: (a, b) ↦ (b, a+b).</p>
<div class="sourceCode" id="cb17"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb17-1" data-line-number="1"><span class="ot">fibPairs ::</span> [(<span class="dt">Integer</span>, <span class="dt">Integer</span>)]</a></code></pre></div>
<div class="indent"><form class="interpreter" action="javascript:getOne('c=check&amp;f=Higherorder_798868729e19745c575006b0b9e22759.hs','798868729e19745c575006b0b9e22759','798868729e19745c575006b0b9e22759');"><textarea cols="80" rows="3" id="tarea798868729e19745c575006b0b9e22759"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="res798868729e19745c575006b0b9e22759"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','f26d1dc5aaa569efde688c34b7f38592','f26d1dc5aaa569efde688c34b7f38592');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareaf26d1dc5aaa569efde688c34b7f38592" value="take 5 fibPairs" /><br /><div class="answer" id="resf26d1dc5aaa569efde688c34b7f38592"><code class="result">[(0, 1), (1, 1), (1, 2), (2, 3), (3, 5)]</code><code> :: </code><code class="type">[(Integer, Integer)]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','7cf710adc08bc42abfec93a76a68547a','7cf710adc08bc42abfec93a76a68547a');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea7cf710adc08bc42abfec93a76a68547a" value="take 8 (map fst fibPairs)" /><br /><div class="answer" id="res7cf710adc08bc42abfec93a76a68547a"><code class="result">[0, 1, 1, 2, 3, 5, 8, 13]</code><code> :: </code><code class="type">[Integer]</code></div></form>
</section>
<section id="feladat-data.list.group" class="level1">
<h1>Feladat: <code>Data.List.group</code></h1>
<p>Adjuk meg a <code>group</code> függvény definícióját! Ez a függvény kisebb csoportokra bont egy listát aszerint, hogy az egymás mellett levő elemek megegyeznek vagy sem.</p>
<div class="sourceCode" id="cb18"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb18-1" data-line-number="1">group<span class="ot"> ::</span> <span class="dt">Eq</span> a <span class="ot">=&gt;</span> [a]<span class="co">{-véges-}</span> <span class="ot">-&gt;</span> [[a]]</a></code></pre></div>
<div class="indent"><form class="interpreter" action="javascript:getOne('c=check&amp;f=Higherorder_e75cb0852406e516163b077c1e83eb51.hs','e75cb0852406e516163b077c1e83eb51','e75cb0852406e516163b077c1e83eb51');"><textarea cols="80" rows="5" id="tareae75cb0852406e516163b077c1e83eb51"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="rese75cb0852406e516163b077c1e83eb51"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','092958921c298710ec950d2a718289da','092958921c298710ec950d2a718289da');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea092958921c298710ec950d2a718289da" value="group [1..10]" /><br /><div class="answer" id="res092958921c298710ec950d2a718289da"><code class="result">[[1], [2], [3], [4], [5], [6], [7], [8], [9], [10]]</code><code> :: </code><code class="type">[[Integer]]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','9e12d9e6e2f4af661ba71ae3eeaedee6','9e12d9e6e2f4af661ba71ae3eeaedee6');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea9e12d9e6e2f4af661ba71ae3eeaedee6" value="group [True,True,True,True]" /><br /><div class="answer" id="res9e12d9e6e2f4af661ba71ae3eeaedee6"><code class="result">[[True, True, True, True]]</code><code> :: </code><code class="type">[[Bool]]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','46f35c2a54dfc6fc7dcc2f64cbc1d70e','46f35c2a54dfc6fc7dcc2f64cbc1d70e');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea46f35c2a54dfc6fc7dcc2f64cbc1d70e" value="group &quot;Mississippi&quot;" /><br /><div class="answer" id="res46f35c2a54dfc6fc7dcc2f64cbc1d70e"><code class="result">[&quot;M&quot;, &quot;i&quot;, &quot;ss&quot;, &quot;i&quot;, &quot;ss&quot;, &quot;i&quot;, &quot;pp&quot;, &quot;i&quot;]</code><code> :: </code><code class="type">[[Char]]</code></div></form>
<p><em>Segítség.</em> Alkalmazzuk a <code>span</code> függvényt!</p>
</section>
<section id="feladat-ismétlődő-elemeket-tartalmazó-lista-tömörítése" class="level1">
<h1>Feladat: Ismétlődő elemeket tartalmazó lista tömörítése</h1>
<p>A <code>compress l</code> egymás után ismétlődő elemeket keresve tömörítse a paraméterként kapott listát!</p>
<div class="sourceCode" id="cb19"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb19-1" data-line-number="1"><span class="ot">compress ::</span> <span class="dt">Eq</span> a <span class="ot">=&gt;</span> [a] <span class="ot">-&gt;</span> [(<span class="dt">Int</span>,a)]</a></code></pre></div>
<div class="indent"><form class="interpreter" action="javascript:getOne('c=check&amp;f=Higherorder_402cc01b33f53f51c91a18f4a9bb337e.hs','402cc01b33f53f51c91a18f4a9bb337e','402cc01b33f53f51c91a18f4a9bb337e');"><textarea cols="80" rows="4" id="tarea402cc01b33f53f51c91a18f4a9bb337e"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="res402cc01b33f53f51c91a18f4a9bb337e"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','07d7d8e5c09fa70e404cdd8241c0cdab','07d7d8e5c09fa70e404cdd8241c0cdab');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea07d7d8e5c09fa70e404cdd8241c0cdab" value="compress &quot;abbccccb&quot;" /><br /><div class="answer" id="res07d7d8e5c09fa70e404cdd8241c0cdab"><code class="result">[(1, 'a'), (2, 'b'), (4, 'c'), (1, 'b')]</code><code> :: </code><code class="type">[(Int, Char)]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','9d8d3f4fa2d97131228997b5796ca6df','9d8d3f4fa2d97131228997b5796ca6df');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea9d8d3f4fa2d97131228997b5796ca6df" value="compress (sort &quot;abrakadabra&quot;)" /><br /><div class="answer" id="res9d8d3f4fa2d97131228997b5796ca6df"><code class="result">[(5, 'a'), (2, 'b'), (1, 'd'), (1, 'k'), (2, 'r')]</code><code> :: </code><code class="type">[(Int, Char)]</code></div></form>
<p><em>Segítség.</em> Használhatjuk a <code>group</code> függvényt.</p>
</section>
<section id="feladat-pascal-háromszög" class="level1">
<h1>Feladat: Pascal-háromszög</h1>
<p>Állítsuk elő a Pascal-háromszöget: <code>[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1],</code>…<code>]</code>.</p>
<div class="sourceCode" id="cb20"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb20-1" data-line-number="1"><span class="ot">pascalTriangle ::</span> [[<span class="dt">Integer</span>]]</a></code></pre></div>
<div class="indent"><form class="interpreter" action="javascript:getOne('c=check&amp;f=Higherorder_6acbb828a1aceedf04eac9a059549d83.hs','6acbb828a1aceedf04eac9a059549d83','6acbb828a1aceedf04eac9a059549d83');"><textarea cols="80" rows="3" id="tarea6acbb828a1aceedf04eac9a059549d83"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="res6acbb828a1aceedf04eac9a059549d83"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','eae7899c07994b85d5ab9886b5c9680c','eae7899c07994b85d5ab9886b5c9680c');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareaeae7899c07994b85d5ab9886b5c9680c" value="take 5 pascalTriangle" /><br /><div class="answer" id="reseae7899c07994b85d5ab9886b5c9680c"><code class="result">[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]</code><code> :: </code><code class="type">[[Integer]]</code></div></form>
</section>
<section id="feladat-négyzetgyök-számolás-newton-módszerrel" class="level1">
<h1>Feladat: Négyzetgyök számolás Newton-módszerrel</h1>
<p>Közelítsük az <span class="math inline"><em>a</em></span> négyzetgyökét az <code>\x-&gt;(x+a/x)/2</code> függvénnyel.</p>
<div class="sourceCode" id="cb21"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb21-1" data-line-number="1">sqrt<span class="ot"> ::</span> <span class="dt">RealFloat</span> a <span class="ot">=&gt;</span> a <span class="ot">-&gt;</span> a</a></code></pre></div>
<div class="indent"><form class="interpreter" action="javascript:getOne('c=check&amp;f=Higherorder_ee87014e6d8143e70ce45b3f1274aec2.hs','ee87014e6d8143e70ce45b3f1274aec2','ee87014e6d8143e70ce45b3f1274aec2');"><textarea cols="80" rows="3" id="tareaee87014e6d8143e70ce45b3f1274aec2"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="resee87014e6d8143e70ce45b3f1274aec2"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','b62e9911db46192ae86566a86ce2e7bb','b62e9911db46192ae86566a86ce2e7bb');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareab62e9911db46192ae86566a86ce2e7bb" value="abs (sqrt 4 - 2) &lt; 1e-8" /><br /><div class="answer" id="resb62e9911db46192ae86566a86ce2e7bb"><code class="result">True</code><code> :: </code><code class="type">Bool</code></div></form>
</section>
<section id="feladat-prelude.uncurry" class="level1">
<h1>Feladat: <code>Prelude.uncurry</code> [*]</h1>
<p>Definiáljuk újra a <code>uncurry</code> függvényt, amely kétargumentumú függvényekből páron értelmezett függvényeket csinál!</p>
<div class="sourceCode" id="cb22"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb22-1" data-line-number="1">uncurry<span class="ot"> ::</span> (a <span class="ot">-&gt;</span> b <span class="ot">-&gt;</span> c) <span class="ot">-&gt;</span> ((a, b) <span class="ot">-&gt;</span> c)</a></code></pre></div>
<div class="indent"><form class="interpreter" action="javascript:getOne('c=check&amp;f=Higherorder_8651500bd14543d43c5971e7b72d03e8.hs','8651500bd14543d43c5971e7b72d03e8','8651500bd14543d43c5971e7b72d03e8');"><textarea cols="80" rows="3" id="tarea8651500bd14543d43c5971e7b72d03e8"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="res8651500bd14543d43c5971e7b72d03e8"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','fca079fd39525a6e093a3d9ffc834de4','fca079fd39525a6e093a3d9ffc834de4');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareafca079fd39525a6e093a3d9ffc834de4" value="uncurry replicate (2,'a') " /><br /><div class="answer" id="resfca079fd39525a6e093a3d9ffc834de4"><code class="result">&quot;aa&quot;</code><code> :: </code><code class="type">[Char]</code></div></form>
<p><em>Megjegyzés.</em> Ennek a fordítottja a <code>curry</code> függvény:</p>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','d03f015ea07a44f63da3ecb771c5cc49','d03f015ea07a44f63da3ecb771c5cc49');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="taread03f015ea07a44f63da3ecb771c5cc49" value=":t curry" /><br /><div class="answer" id="resd03f015ea07a44f63da3ecb771c5cc49"><code class="result">curry</code><code> :: </code><code class="type">((a, b) -&gt; c) -&gt; a -&gt; b -&gt; c</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','0001070cc0a0230daad10424e6139369','0001070cc0a0230daad10424e6139369');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea0001070cc0a0230daad10424e6139369" value=":t curry (uncurry (+))" /><br /><div class="answer" id="res0001070cc0a0230daad10424e6139369"><code class="result">curry (uncurry (+))</code><code> :: </code><code class="type">Num c =&gt; c -&gt; c -&gt; c</code></div></form>
</section>
<section id="feladat-kitömörítés" class="level1">
<h1>Feladat: Kitömörítés [*]</h1>
<p>Ismétlődő elemeket tartalmazó lista kitömörítése: az <code>decompress</code> legyen a <code>compress</code> inverze!</p>
<div class="sourceCode" id="cb23"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb23-1" data-line-number="1"><span class="ot">decompress ::</span> <span class="dt">Eq</span> a <span class="ot">=&gt;</span> [(<span class="dt">Int</span>,a)] <span class="ot">-&gt;</span> [a]</a></code></pre></div>
<div class="indent"><form class="interpreter" action="javascript:getOne('c=check&amp;f=Higherorder_1e062bbd8a2f7f18968b71a4b6f03923.hs','1e062bbd8a2f7f18968b71a4b6f03923','1e062bbd8a2f7f18968b71a4b6f03923');"><textarea cols="80" rows="4" id="tarea1e062bbd8a2f7f18968b71a4b6f03923"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="res1e062bbd8a2f7f18968b71a4b6f03923"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','b4c9bf1f6b4f6a0568cb45d5945abf32','b4c9bf1f6b4f6a0568cb45d5945abf32');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareab4c9bf1f6b4f6a0568cb45d5945abf32" value="decompress [(1,'a'),(2,'b'),(4,'c'),(1,'b')] " /><br /><div class="answer" id="resb4c9bf1f6b4f6a0568cb45d5945abf32"><code class="result">&quot;abbccccb&quot;</code><code> :: </code><code class="type">[Char]</code></div></form>
</section>
<section id="feladat-súlyozott-összeg" class="level1">
<h1>Feladat: Súlyozott összeg</h1>
<p>Állítsunk elő súlyozott összeget! A súlyok az értékek elé vannak párosítva egy listában.</p>
<div class="sourceCode" id="cb24"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb24-1" data-line-number="1"><span class="ot">weightedSum ::</span> <span class="dt">Num</span> a <span class="ot">=&gt;</span> [(a,a)] <span class="ot">-&gt;</span> a</a></code></pre></div>
<div class="indent"><form class="interpreter" action="javascript:getOne('c=check&amp;f=Higherorder_b09f72948061395bb9193e183e287e34.hs','b09f72948061395bb9193e183e287e34','b09f72948061395bb9193e183e287e34');"><textarea cols="80" rows="3" id="tareab09f72948061395bb9193e183e287e34"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="resb09f72948061395bb9193e183e287e34"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Higherorder.hs','4d3b3349a484c66d0bed5079503528ed','4d3b3349a484c66d0bed5079503528ed');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea4d3b3349a484c66d0bed5079503528ed" value="weightedSum [(1,1), (2,2)] " /><br /><div class="answer" id="res4d3b3349a484c66d0bed5079503528ed"><code class="result">5</code><code> :: </code><code class="type">Integer</code></div></form>
</section>
</body>
</html>

