<?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>Guards</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">Guards</h1>
<div id="info"></div>
<ul>
<li><a href="#guards">Guards</a></li>
<li><a href="#guards-2">Guards (2)</a></li>
<li><a href="#exercise-uppercase-lowercase">Exercise: Uppercase-Lowercase</a></li>
<li><a href="#exercise-data.char.digittoint">Exercise: <code>Data.Char.digitToInt</code> [*]</a></li>
<li><a href="#exercise-square">Exercise: Square</a></li>
<li><a href="#exercise-prelude.">Exercise: <code>(Prelude.^)</code> [*]</a></li>
<li><a href="#exercise-binary-numerals">Exercise: Binary Numerals</a></li>
<li><a href="#guards-with-pattern-matching-prelude.drop">Guards with Pattern Matching: <code>Prelude.drop</code> [*]</a></li>
<li><a href="#exercise-prelude.take">Exercise: <code>Prelude.take</code></a></li>
<li><a href="#exercise-data.list.insert">Exercise: <code>Data.List.insert</code> [*]</a></li>
<li><a href="#exercise-sorted-merge">Exercise: Sorted Merge</a></li>
<li><a href="#exercise-combinations">Exercise: Combinations</a></li>
<li><a href="#exercise-packing">Exercise: Packing</a></li>
</ul>
</div>
<section id="guards" class="level1">
<h1>Guards</h1>
<p><img src="Guards_en311d942d1f438346889ce826292ee64b.png" alt="Guards_en311d942d1f438346889ce826292ee64b.png" /></p>
<div class="sourceCode" id="cb1"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb1-1" data-line-number="1">min x y</a>
<a class="sourceLine" id="cb1-2" data-line-number="2">    <span class="fu">|</span> x <span class="fu">&lt;=</span> y    <span class="fu">=</span>  x</a>
<a class="sourceLine" id="cb1-3" data-line-number="3">    <span class="fu">|</span> otherwise <span class="fu">=</span>  y</a></code></pre></div>
<p>Differences from case distinction in mathematics:</p>
<ul>
<li>Columns of conditions and results are swapped.</li>
<li>There is <code>|</code> instead of <code>{</code>, and the equation sign is indented.</li>
</ul>
</section>
<section id="guards-2" class="level1">
<h1>Guards (2)</h1>
<p>Syntax:</p>
<ul>
<li>Number of cases: 1, 2, 3, …</li>
<li>In each case: <code>|</code> <em>guard expression</em> <code>=</code> <em>expression</em></li>
<li>Guards expressions have type of <code>Bool</code>.</li>
</ul>
<p>Semantics: Guard expressions are checked top-down, and the first satisfying condition is selected.</p>
<div class="handout">
<hr />
<p>The two definitions are similar, but there are some minor differences.</p>
<ul>
<li>In Haskell, conditions and the corresponding cases are swapped (which is more logical in a sense).</li>
<li>There are vertical lines in place of the big bracket (for technical reasons).</li>
<li>The equation sign before the bracket moved in between the conditions and the assigned expressions.</li>
</ul>
<p>Thus, the syntax is as follows.</p>
<ul>
<li>The number of cases may be one, two, or more.</li>
<li><p>Each of the cases is written in the following way:</p>
<p><code>|</code> <em>guard (expression)</em> <code>=</code> <em>expression</em></p></li>
<li><p>Guards are Boolean-type expressions.</p></li>
</ul>
<p>Semantics: Guards are checked for satisfaction from the top to the bottom. The result will be the expression assigned to the first guard expression evaluating to true.</p>
<p>Note that <code>otherwise</code> is not a keyword, but a constant defined in the <code>Prelude</code> module.</p>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','4c3706b60ef7bf6c93fdcbdfc157478c','4c3706b60ef7bf6c93fdcbdfc157478c');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea4c3706b60ef7bf6c93fdcbdfc157478c" value="otherwise == True" /><br /><div class="answer" id="res4c3706b60ef7bf6c93fdcbdfc157478c"></div></form>
</div>
</section>
<section id="exercise-uppercase-lowercase" class="level1">
<h1>Exercise: Uppercase-Lowercase</h1>
<p>Define the function <code>upperLower</code>, which converts lowercase letters to uppercase ones and vice versa.</p>
<div class="sourceCode" id="cb2"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb2-1" data-line-number="1"><span class="ot">upperLower ::</span> <span class="dt">Char</span> <span class="ot">-&gt;</span> <span class="dt">Char</span></a></code></pre></div>
<div class="indent"><form class="interpreter" action="javascript:getOne('c=check&amp;f=Guards_en_e66f315c945bc766d7c105f90aed0bcd.hs','e66f315c945bc766d7c105f90aed0bcd','e66f315c945bc766d7c105f90aed0bcd');"><textarea cols="80" rows="6" id="tareae66f315c945bc766d7c105f90aed0bcd"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="rese66f315c945bc766d7c105f90aed0bcd"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','9c216a3a450676489f8245a8c6cc5bff','9c216a3a450676489f8245a8c6cc5bff');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea9c216a3a450676489f8245a8c6cc5bff" value="upperLower 'a'" /><br /><div class="answer" id="res9c216a3a450676489f8245a8c6cc5bff"><code class="result">'A'</code><code> :: </code><code class="type">Char</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','fac9d769bf58f61b0d5ccad77df9e1a8','fac9d769bf58f61b0d5ccad77df9e1a8');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareafac9d769bf58f61b0d5ccad77df9e1a8" value="upperLower 'T'" /><br /><div class="answer" id="resfac9d769bf58f61b0d5ccad77df9e1a8"><code class="result">'t'</code><code> :: </code><code class="type">Char</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','45801a34562f721ee3e08de6ddb3f410','45801a34562f721ee3e08de6ddb3f410');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea45801a34562f721ee3e08de6ddb3f410" value="upperLower ','" /><br /><div class="answer" id="res45801a34562f721ee3e08de6ddb3f410"><code class="result">','</code><code> :: </code><code class="type">Char</code></div></form>
<p>Hint: It requires the <code>Data.Char</code> module to be imported.</p>
</section>
<section id="exercise-data.char.digittoint" class="level1">
<h1>Exercise: <code>Data.Char.digitToInt</code> [*]</h1>
<p>The following function assigns numeric values to characters:</p>
<div class="sourceCode" id="cb3"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb3-1" data-line-number="1">digitToInt<span class="ot"> ::</span> <span class="dt">Char</span> <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=Guards_en_bb1aee0c0d9a0c996ff07734af1fa65f.hs','bb1aee0c0d9a0c996ff07734af1fa65f','bb1aee0c0d9a0c996ff07734af1fa65f');"><textarea cols="80" rows="8" id="tareabb1aee0c0d9a0c996ff07734af1fa65f"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="resbb1aee0c0d9a0c996ff07734af1fa65f"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','eac53f95e2236690581a1b6c32c34573','eac53f95e2236690581a1b6c32c34573');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareaeac53f95e2236690581a1b6c32c34573" value="digitToInt '0'" /><br /><div class="answer" id="reseac53f95e2236690581a1b6c32c34573"><code class="result">0</code><code> :: </code><code class="type">Int</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','5599550e35cd29eaa8a7ddb6122061e6','5599550e35cd29eaa8a7ddb6122061e6');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea5599550e35cd29eaa8a7ddb6122061e6" value="digitToInt '9'" /><br /><div class="answer" id="res5599550e35cd29eaa8a7ddb6122061e6"><code class="result">9</code><code> :: </code><code class="type">Int</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','20daf32d8ac1965a72a1835daab81a4f','20daf32d8ac1965a72a1835daab81a4f');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea20daf32d8ac1965a72a1835daab81a4f" value="digitToInt 'A'" /><br /><div class="answer" id="res20daf32d8ac1965a72a1835daab81a4f"><code class="result">10</code><code> :: </code><code class="type">Int</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','cdc79c4061504726edb7114cbcc9422c','cdc79c4061504726edb7114cbcc9422c');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareacdc79c4061504726edb7114cbcc9422c" value="digitToInt 'F'" /><br /><div class="answer" id="rescdc79c4061504726edb7114cbcc9422c"><code class="result">15</code><code> :: </code><code class="type">Int</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','3fbbf478e366915926b2ac53c11925b7','3fbbf478e366915926b2ac53c11925b7');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea3fbbf478e366915926b2ac53c11925b7" value="digitToInt 'a'" /><br /><div class="answer" id="res3fbbf478e366915926b2ac53c11925b7"><code class="result">10</code><code> :: </code><code class="type">Int</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','4e7635df6b787cd86d61b0e248d89fb5','4e7635df6b787cd86d61b0e248d89fb5');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea4e7635df6b787cd86d61b0e248d89fb5" value="digitToInt '.'" /><br /><div class="answer" id="res4e7635df6b787cd86d61b0e248d89fb5"><code class="result">&#8869;&#8321;</code><code> :: </code><code class="type">Int</code><br /><div class="error"><pre class="normal">&#8869;&#8321;: not a digit
CallStack (from HasCallStack):
  error, called at ./Guards_en.lhs:96:33 in main:Guards_en</pre></div></div></form>
</section>
<section id="exercise-square" class="level1">
<h1>Exercise: Square</h1>
<div class="sourceCode" id="cb4"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb4-1" data-line-number="1"><span class="ot">sqr ::</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=Guards_en_058fba6c6443ed06f67a3cd6eea0f0ee.hs','058fba6c6443ed06f67a3cd6eea0f0ee','058fba6c6443ed06f67a3cd6eea0f0ee');"><textarea cols="80" rows="3" id="tarea058fba6c6443ed06f67a3cd6eea0f0ee"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="res058fba6c6443ed06f67a3cd6eea0f0ee"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','a4e60c468715741dd999a521fc491adf','a4e60c468715741dd999a521fc491adf');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareaa4e60c468715741dd999a521fc491adf" value="sqr 4" /><br /><div class="answer" id="resa4e60c468715741dd999a521fc491adf"><code class="result">16</code><code> :: </code><code class="type">Integer</code></div></form>
</section>
<section id="exercise-prelude." class="level1">
<h1>Exercise: <code>(Prelude.^)</code> [*]</h1>
<p>Redefine the <code>(^)</code> operator (quick exponentation).</p>
<p><img src="Guards_en9cae163a7d5bb31970c06157541f303a.png" alt="Guards_en9cae163a7d5bb31970c06157541f303a.png" /></p>
<div class="sourceCode" id="cb5"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb5-1" data-line-number="1"><span class="ot">(^) ::</span> <span class="dt">Num</span> a <span class="ot">=&gt;</span> a <span class="ot">-&gt;</span> <span class="dt">Integer</span> <span class="ot">-&gt;</span> a</a></code></pre></div>
<div class="indent"><form class="interpreter" action="javascript:getOne('c=check&amp;f=Guards_en_6a72e500952a488e35ce2d3e52a49fd6.hs','6a72e500952a488e35ce2d3e52a49fd6','6a72e500952a488e35ce2d3e52a49fd6');"><textarea cols="80" rows="6" id="tarea6a72e500952a488e35ce2d3e52a49fd6"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="res6a72e500952a488e35ce2d3e52a49fd6"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','2fd4d574f55bf32ba86d7a147d591cb4','2fd4d574f55bf32ba86d7a147d591cb4');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea2fd4d574f55bf32ba86d7a147d591cb4" value="3 ^ 0" /><br /><div class="answer" id="res2fd4d574f55bf32ba86d7a147d591cb4"><code class="result">1</code><code> :: </code><code class="type">Integer</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','ae7826ff4b7c9fb00a1c16700fdb8949','ae7826ff4b7c9fb00a1c16700fdb8949');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareaae7826ff4b7c9fb00a1c16700fdb8949" value="3 ^ 3" /><br /><div class="answer" id="resae7826ff4b7c9fb00a1c16700fdb8949"><code class="result">27</code><code> :: </code><code class="type">Integer</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','1d57f8a3c091bfbb83678e98646c4c62','1d57f8a3c091bfbb83678e98646c4c62');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea1d57f8a3c091bfbb83678e98646c4c62" value="1.0000001 ^ 10000000 &gt; 2.718" /><br /><div class="answer" id="res1d57f8a3c091bfbb83678e98646c4c62"><code class="result">True</code><code> :: </code><code class="type">Bool</code></div></form>
</section>
<section id="exercise-binary-numerals" class="level1">
<h1>Exercise: Binary Numerals</h1>
<p>Let <code>toBin</code> be the function that returns a non-negative integer as series of binary numerals of the same value in <em>reversed</em> order.</p>
<p><img src="Guards_enb9495b51db8074570ffed11f2f8e1707.png" alt="Guards_enb9495b51db8074570ffed11f2f8e1707.png" /></p>
<div class="sourceCode" id="cb6"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb6-1" data-line-number="1"><span class="ot">toBin ::</span> <span class="dt">Integer</span> <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=Guards_en_c5072627c751bdafdce2d5419c7bf8e3.hs','c5072627c751bdafdce2d5419c7bf8e3','c5072627c751bdafdce2d5419c7bf8e3');"><textarea cols="80" rows="6" id="tareac5072627c751bdafdce2d5419c7bf8e3"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="resc5072627c751bdafdce2d5419c7bf8e3"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','0310e1e32273b1bd8aa2af1d461a686f','0310e1e32273b1bd8aa2af1d461a686f');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea0310e1e32273b1bd8aa2af1d461a686f" value="toBin 0" /><br /><div class="answer" id="res0310e1e32273b1bd8aa2af1d461a686f"><code class="result">[]</code><code> :: </code><code class="type">[Int]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','b9d77ff255b65087a597ab9c5fa1915d','b9d77ff255b65087a597ab9c5fa1915d');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareab9d77ff255b65087a597ab9c5fa1915d" value="toBin 1" /><br /><div class="answer" id="resb9d77ff255b65087a597ab9c5fa1915d"><code class="result">[1]</code><code> :: </code><code class="type">[Int]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','0f60de2820b503d876fc172e6bcfacbb','0f60de2820b503d876fc172e6bcfacbb');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea0f60de2820b503d876fc172e6bcfacbb" value="toBin 2" /><br /><div class="answer" id="res0f60de2820b503d876fc172e6bcfacbb"><code class="result">[0, 1]</code><code> :: </code><code class="type">[Int]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','e97637f0b50c11b303cd935e1f18a478','e97637f0b50c11b303cd935e1f18a478');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareae97637f0b50c11b303cd935e1f18a478" value="toBin 10" /><br /><div class="answer" id="rese97637f0b50c11b303cd935e1f18a478"><code class="result">[0, 1, 0, 1]</code><code> :: </code><code class="type">[Int]</code></div></form>
</section>
<section id="guards-with-pattern-matching-prelude.drop" class="level1">
<h1>Guards with Pattern Matching: <code>Prelude.drop</code> [*]</h1>
<p>Definition of <code>drop</code>:</p>
<div class="sourceCode" id="cb7"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb7-1" data-line-number="1">drop<span class="ot"> ::</span> <span class="dt">Int</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=Guards_en_05a34216a614d0252cf59b47a595a08b.hs','05a34216a614d0252cf59b47a595a08b','05a34216a614d0252cf59b47a595a08b');"><textarea cols="80" rows="5" id="tarea05a34216a614d0252cf59b47a595a08b"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="res05a34216a614d0252cf59b47a595a08b"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','c39775a05bc2fe3ff3e6c543c2f0dbbd','c39775a05bc2fe3ff3e6c543c2f0dbbd');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareac39775a05bc2fe3ff3e6c543c2f0dbbd" value="drop   3  [1..10]" /><br /><div class="answer" id="resc39775a05bc2fe3ff3e6c543c2f0dbbd"><code class="result">[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=Guards_en.hs','223545bdf32f2ac449ac889ed1bf3e78','223545bdf32f2ac449ac889ed1bf3e78');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea223545bdf32f2ac449ac889ed1bf3e78" value="drop   3  [1,2]" /><br /><div class="answer" id="res223545bdf32f2ac449ac889ed1bf3e78"><code class="result">[]</code><code> :: </code><code class="type">[Integer]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','20885a3552ad30436066dc171081c552','20885a3552ad30436066dc171081c552');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea20885a3552ad30436066dc171081c552" value="drop (-1) [1,2]" /><br /><div class="answer" id="res20885a3552ad30436066dc171081c552"><code class="result">[1, 2]</code><code> :: </code><code class="type">[Integer]</code></div></form>
</section>
<section id="exercise-prelude.take" class="level1">
<h1>Exercise: <code>Prelude.take</code></h1>
<p>Redefine the <code>take</code> function from the <code>Prelude</code> module. Meaning of <code>take n l</code>: take the first <code>n</code> elements from the list <code>l</code>.</p>
<div class="sourceCode" id="cb8"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb8-1" data-line-number="1">take<span class="ot"> ::</span> <span class="dt">Int</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=Guards_en_48e0f3782714ec965f08ce0143ac365b.hs','48e0f3782714ec965f08ce0143ac365b','48e0f3782714ec965f08ce0143ac365b');"><textarea cols="80" rows="5" id="tarea48e0f3782714ec965f08ce0143ac365b"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="res48e0f3782714ec965f08ce0143ac365b"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','75d93baa0594bd40dd40f5ecc8f95c16','75d93baa0594bd40dd40f5ecc8f95c16');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea75d93baa0594bd40dd40f5ecc8f95c16" value="take   3  [1..10] " /><br /><div class="answer" id="res75d93baa0594bd40dd40f5ecc8f95c16"><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=Guards_en.hs','0a1ae7cc96417ef67d32273cf9247fa0','0a1ae7cc96417ef67d32273cf9247fa0');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea0a1ae7cc96417ef67d32273cf9247fa0" value="take   3  [1,2]   " /><br /><div class="answer" id="res0a1ae7cc96417ef67d32273cf9247fa0"><code class="result">[1, 2]</code><code> :: </code><code class="type">[Integer]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','e20aa9ff7b7b7fbb123b7ba6f031c831','e20aa9ff7b7b7fbb123b7ba6f031c831');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareae20aa9ff7b7b7fbb123b7ba6f031c831" value="take (-1) [1,2]   " /><br /><div class="answer" id="rese20aa9ff7b7b7fbb123b7ba6f031c831"><code class="result">[]</code><code> :: </code><code class="type">[Integer]</code></div></form>
</section>
<section id="exercise-data.list.insert" class="level1">
<h1>Exercise: <code>Data.List.insert</code> [*]</h1>
<p>Redefine the <code>insert</code> function from the <code>Prelude</code> module (insertion of an element to a sorted list).</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="ot">insert ::</span> <span class="dt">Ord</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=Guards_en_13e4c35bf5d4991ceb9b1113dc8e78d3.hs','13e4c35bf5d4991ceb9b1113dc8e78d3','13e4c35bf5d4991ceb9b1113dc8e78d3');"><textarea cols="80" rows="7" id="tarea13e4c35bf5d4991ceb9b1113dc8e78d3"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="res13e4c35bf5d4991ceb9b1113dc8e78d3"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','872b2eff41f09b914d57dd818a2b7f0a','872b2eff41f09b914d57dd818a2b7f0a');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea872b2eff41f09b914d57dd818a2b7f0a" value="insert 3  []" /><br /><div class="answer" id="res872b2eff41f09b914d57dd818a2b7f0a"><code class="result">[3]</code><code> :: </code><code class="type">[Integer]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','77d559585c2f70904c5986169b827bb1','77d559585c2f70904c5986169b827bb1');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea77d559585c2f70904c5986169b827bb1" value="insert 3  [1,2,5,8]" /><br /><div class="answer" id="res77d559585c2f70904c5986169b827bb1"><code class="result">[1, 2, 3, 5, 8]</code><code> :: </code><code class="type">[Integer]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','3792691619730c7bda5a84b999f9de6d','3792691619730c7bda5a84b999f9de6d');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea3792691619730c7bda5a84b999f9de6d" value="insert 10 [1,2,5,8]" /><br /><div class="answer" id="res3792691619730c7bda5a84b999f9de6d"><code class="result">[1, 2, 5, 8, 10]</code><code> :: </code><code class="type">[Integer]</code></div></form>
</section>
<section id="exercise-sorted-merge" class="level1">
<h1>Exercise: Sorted Merge</h1>
<p>Define a sort merge.</p>
<div class="sourceCode" id="cb10"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb10-1" data-line-number="1"><span class="ot">sortMerge ::</span> <span class="dt">Ord</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=Guards_en_9848dc6ab34f8b2412c93ced692de0a3.hs','9848dc6ab34f8b2412c93ced692de0a3','9848dc6ab34f8b2412c93ced692de0a3');"><textarea cols="80" rows="8" id="tarea9848dc6ab34f8b2412c93ced692de0a3"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="res9848dc6ab34f8b2412c93ced692de0a3"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','de35d85540255b7a2d2e25abe2184f8e','de35d85540255b7a2d2e25abe2184f8e');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareade35d85540255b7a2d2e25abe2184f8e" value="sortMerge [1,2,8] [3,4,10]" /><br /><div class="answer" id="resde35d85540255b7a2d2e25abe2184f8e"><code class="result">[1, 2, 3, 4, 8, 10]</code><code> :: </code><code class="type">[Integer]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','85b12340999ecec1c712527fba140752','85b12340999ecec1c712527fba140752');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea85b12340999ecec1c712527fba140752" value="sortMerge []      [3,4,10]" /><br /><div class="answer" id="res85b12340999ecec1c712527fba140752"><code class="result">[3, 4, 10]</code><code> :: </code><code class="type">[Integer]</code></div></form>
</section>
<section id="exercise-combinations" class="level1">
<h1>Exercise: Combinations</h1>
<p>Generate combinations of elements for a list without repetitions. (Let us consider the elements of the list distinct.)</p>
<div class="sourceCode" id="cb11"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb11-1" data-line-number="1"><span class="ot">combinations ::</span> <span class="dt">Int</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=Guards_en_8c858d8c2c2e3391804258044a21747c.hs','8c858d8c2c2e3391804258044a21747c','8c858d8c2c2e3391804258044a21747c');"><textarea cols="80" rows="10" id="tarea8c858d8c2c2e3391804258044a21747c"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="res8c858d8c2c2e3391804258044a21747c"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','057f444b6c043da71731d55b2ed5b8bd','057f444b6c043da71731d55b2ed5b8bd');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea057f444b6c043da71731d55b2ed5b8bd" value="combinations (-1) &quot;abcd&quot;" /><br /><div class="answer" id="res057f444b6c043da71731d55b2ed5b8bd"><code class="result">[]</code><code> :: </code><code class="type">[[Char]]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','3e827c84d6bd684582c5edec222c157c','3e827c84d6bd684582c5edec222c157c');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea3e827c84d6bd684582c5edec222c157c" value="combinations   0  &quot;abcd&quot;" /><br /><div class="answer" id="res3e827c84d6bd684582c5edec222c157c"><code class="result">[[]]</code><code> :: </code><code class="type">[[Char]]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','1e829172fe8d034371318d9ba048b336','1e829172fe8d034371318d9ba048b336');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea1e829172fe8d034371318d9ba048b336" value="combinations   1  &quot;abcd&quot;" /><br /><div class="answer" id="res1e829172fe8d034371318d9ba048b336"><code class="result">[&quot;a&quot;, &quot;b&quot;, &quot;c&quot;, &quot;d&quot;]</code><code> :: </code><code class="type">[[Char]]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','cb4dca709c36687bf93cdd1bc510f6d2','cb4dca709c36687bf93cdd1bc510f6d2');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareacb4dca709c36687bf93cdd1bc510f6d2" value="combinations   2  &quot;abcd&quot;" /><br /><div class="answer" id="rescb4dca709c36687bf93cdd1bc510f6d2"><code class="result">[&quot;ab&quot;, &quot;ac&quot;, &quot;ad&quot;, &quot;bc&quot;, &quot;bd&quot;, &quot;cd&quot;]</code><code> :: </code><code class="type">[[Char]]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','9c4de147468914ff54ff3a9b36319cee','9c4de147468914ff54ff3a9b36319cee');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea9c4de147468914ff54ff3a9b36319cee" value="combinations   3  &quot;abcd&quot;" /><br /><div class="answer" id="res9c4de147468914ff54ff3a9b36319cee"><code class="result">[&quot;abc&quot;, &quot;abd&quot;, &quot;acd&quot;, &quot;bcd&quot;]</code><code> :: </code><code class="type">[[Char]]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','d86664eeb4576f1e4a00cf49bc5a569d','d86664eeb4576f1e4a00cf49bc5a569d');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="taread86664eeb4576f1e4a00cf49bc5a569d" value="combinations   4  &quot;abcd&quot;" /><br /><div class="answer" id="resd86664eeb4576f1e4a00cf49bc5a569d"><code class="result">[&quot;abcd&quot;]</code><code> :: </code><code class="type">[[Char]]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','bc903224a8b890e44de65eb83bee8f57','bc903224a8b890e44de65eb83bee8f57');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tareabc903224a8b890e44de65eb83bee8f57" value="combinations   5  &quot;abcd&quot;" /><br /><div class="answer" id="resbc903224a8b890e44de65eb83bee8f57"><code class="result">[]</code><code> :: </code><code class="type">[[Char]]</code></div></form>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','61787f56eea6ba95076af41142cae226','61787f56eea6ba95076af41142cae226');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea61787f56eea6ba95076af41142cae226" value="combinations 1 &quot;aa&quot;" /><br /><div class="answer" id="res61787f56eea6ba95076af41142cae226"><code class="result">[&quot;a&quot;, &quot;a&quot;]</code><code> :: </code><code class="type">[[Char]]</code></div></form>
</section>
<section id="exercise-packing" class="level1">
<h1>Exercise: Packing</h1>
<p>Let <code>n</code> a non-negative integer and <code>xs</code> a list of non-negative integers.</p>
<p>Choose elements of <code>xs</code> in all possible ways that the sum of the chosen integers must be <code>n</code>.</p>
<div class="sourceCode" id="cb12"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb12-1" data-line-number="1"><span class="ot">pack&#39; ::</span> <span class="dt">Integral</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=Guards_en_07add4ca611649d8eca339b006546920.hs','07add4ca611649d8eca339b006546920','07add4ca611649d8eca339b006546920');"><textarea cols="80" rows="6" id="tarea07add4ca611649d8eca339b006546920"></textarea><br /><input type="submit" value="Check" /></form><div class="answer" id="res07add4ca611649d8eca339b006546920"></div></div>
<form class="resetinterpreter" action="javascript:getOne('c=eval&amp;f=Guards_en.hs','64c308b786f37484d9b8a949fc468793','64c308b786f37484d9b8a949fc468793');"><code class="prompt">Test&gt; </code><input class="interpreter" type="text" size="80" id="tarea64c308b786f37484d9b8a949fc468793" value="pack' [2,3,5,7,11,13,17] 25" /><br /><div class="answer" id="res64c308b786f37484d9b8a949fc468793"><code class="result">[[5, 7, 13], [3, 5, 17], [2, 5, 7, 11], [2, 3, 7, 13]]</code><code> :: </code><code class="type">[[Integer]]</code></div></form>
</section>
</body>
</html>

