<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://behalek.cs.vsb.cz/wiki/index.php?action=history&amp;feed=atom&amp;title=FP_Laboratory_9%2Fen</id>
	<title>FP Laboratory 9/en - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://behalek.cs.vsb.cz/wiki/index.php?action=history&amp;feed=atom&amp;title=FP_Laboratory_9%2Fen"/>
	<link rel="alternate" type="text/html" href="http://behalek.cs.vsb.cz/wiki/index.php?title=FP_Laboratory_9/en&amp;action=history"/>
	<updated>2026-04-21T16:41:41Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.33.1</generator>
	<entry>
		<id>http://behalek.cs.vsb.cz/wiki/index.php?title=FP_Laboratory_9/en&amp;diff=2908&amp;oldid=prev</id>
		<title>FuzzyBot: Updating to match new version of source page</title>
		<link rel="alternate" type="text/html" href="http://behalek.cs.vsb.cz/wiki/index.php?title=FP_Laboratory_9/en&amp;diff=2908&amp;oldid=prev"/>
		<updated>2021-11-15T07:41:13Z</updated>

		<summary type="html">&lt;p&gt;Updating to match new version of source page&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 07:41, 15 November 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l83&quot; &gt;Line 83:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 83:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      else x&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      else x&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;showExpr&amp;#039; (Div l r) op = let&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;showExpr&amp;#039; (Div l r) op = let&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   x = showExpr&amp;#039; l Hi ++&amp;quot;/&amp;quot;++showExpr&amp;#039; r &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Hi&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   x = showExpr&amp;#039; l Hi ++&amp;quot;/&amp;quot;++showExpr&amp;#039; r &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;HiDiv&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   in if op == HiDiv&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   in if op == HiDiv&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      then &amp;quot;(&amp;quot; ++ x ++&amp;quot;)&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      then &amp;quot;(&amp;quot; ++ x ++&amp;quot;)&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>FuzzyBot</name></author>
		
	</entry>
	<entry>
		<id>http://behalek.cs.vsb.cz/wiki/index.php?title=FP_Laboratory_9/en&amp;diff=2827&amp;oldid=prev</id>
		<title>FuzzyBot: Updating to match new version of source page</title>
		<link rel="alternate" type="text/html" href="http://behalek.cs.vsb.cz/wiki/index.php?title=FP_Laboratory_9/en&amp;diff=2827&amp;oldid=prev"/>
		<updated>2021-10-20T19:03:21Z</updated>

		<summary type="html">&lt;p&gt;Updating to match new version of source page&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== User defined data types and type classes == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: right&amp;quot;&amp;gt; [[File:Video logo.png|80px|link=https://youtu.be/lo0pdwWoSx4]]&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Consider following representation of expressions&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Haskell&amp;quot;&amp;gt;&lt;br /&gt;
data Expr = Num Int&lt;br /&gt;
          | Add Expr Expr&lt;br /&gt;
          | Sub Expr Expr&lt;br /&gt;
          | Mul Expr Expr&lt;br /&gt;
          | Div Expr Expr&lt;br /&gt;
          | Var Char&lt;br /&gt;
	  deriving (Eq)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Create function eval that evaluates expresions. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: right&amp;quot;&amp;gt; [[File:Video logo.png|80px|link=https://youtu.be/AvThE0I4Iz8]]&amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Haskell&amp;quot;&amp;gt;&lt;br /&gt;
eval :: Expr -&amp;gt; Int&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Haskell&amp;quot; class=&amp;quot;myDark&amp;quot;&amp;gt;&lt;br /&gt;
*Main&amp;gt; eval (Add (Num 1) (Num 2))&lt;br /&gt;
3&lt;br /&gt;
*Main&amp;gt; eval (Mul (Add (Num 1) (Num 2)) (Num 3))&lt;br /&gt;
9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-collapsetext=&amp;quot;Hide solution&amp;quot; data-expandtext=&amp;quot;Show solution&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Haskell&amp;quot;&amp;gt;&lt;br /&gt;
eval :: Expr -&amp;gt; Int&lt;br /&gt;
eval (Num x) = x&lt;br /&gt;
eval (Add l r) =  (eval l) + (eval r)&lt;br /&gt;
eval (Sub l r) =  (eval l) - (eval r)&lt;br /&gt;
eval (Mul l r) =  (eval l) * (eval r)&lt;br /&gt;
eval (Div l r) =  (eval l) `div` (eval r)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[File:Tryit.png|center|60px|Try it!|link=https://rextester.com/BHV96059]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Create function showExpr that shows expression as a String. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: right&amp;quot;&amp;gt; [[File:Video logo.png|80px|link=https://youtu.be/cPL1zEZHLh0]]&amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Haskell&amp;quot;&amp;gt;&lt;br /&gt;
showExpr :: Expr -&amp;gt; String&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Haskell&amp;quot; class=&amp;quot;myDark&amp;quot;&amp;gt;&lt;br /&gt;
*Main&amp;gt; showExpr (Add (Num 1) (Num 2))&lt;br /&gt;
&amp;quot;1+2&amp;quot;&lt;br /&gt;
*Main&amp;gt; showExpr (Mul (Add (Num 1) (Num 2)) (Num 3))&lt;br /&gt;
&amp;quot;(1+2)*3&amp;quot;&lt;br /&gt;
*Main&amp;gt; showExpr (Mul (Add (Num 1) (Mul (Num 2) (Var &amp;#039;x&amp;#039;))) (Mul (Num 3) (Var &amp;#039;x&amp;#039;)))&lt;br /&gt;
&amp;quot;(1+2*x)*3*x&amp;quot;&lt;br /&gt;
*Main&amp;gt; showExpr (Mul (Num 2) (Mul (Var &amp;#039;x&amp;#039;) (Var &amp;#039;x&amp;#039;)))                            &lt;br /&gt;
&amp;quot;2*x*x&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-collapsetext=&amp;quot;Hide solution&amp;quot; data-expandtext=&amp;quot;Show solution&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Haskell&amp;quot;&amp;gt;&lt;br /&gt;
showExpr :: Expr -&amp;gt; String&lt;br /&gt;
showExpr expr = showExpr&amp;#039; expr NoOp&lt;br /&gt;
&lt;br /&gt;
data Operation = Hi | HiDiv | Lo | LoSub | NoOp deriving (Eq)&lt;br /&gt;
&lt;br /&gt;
showExpr&amp;#039; :: Expr -&amp;gt; Operation -&amp;gt; String&lt;br /&gt;
showExpr&amp;#039; (Num x) _ = show x&lt;br /&gt;
showExpr&amp;#039; (Var x) _ =  [x]&lt;br /&gt;
showExpr&amp;#039; (Add l r) op = let&lt;br /&gt;
  x = showExpr&amp;#039; l Lo ++&amp;quot;+&amp;quot;++showExpr&amp;#039; r Lo&lt;br /&gt;
  in if op == Hi || op == HiDiv || op==LoSub &lt;br /&gt;
     then &amp;quot;(&amp;quot; ++ x ++&amp;quot;)&amp;quot;&lt;br /&gt;
     else x&lt;br /&gt;
showExpr&amp;#039; (Sub l r) op = let&lt;br /&gt;
  x = showExpr&amp;#039; l Lo ++&amp;quot;-&amp;quot;++showExpr&amp;#039; r LoSub&lt;br /&gt;
  in if op == Hi || op == HiDiv || op==LoSub &lt;br /&gt;
     then &amp;quot;(&amp;quot; ++ x ++&amp;quot;)&amp;quot;&lt;br /&gt;
     else x     &lt;br /&gt;
showExpr&amp;#039; (Mul l r) op = let&lt;br /&gt;
  x = showExpr&amp;#039; l Hi ++&amp;quot;*&amp;quot;++showExpr&amp;#039; r Hi&lt;br /&gt;
  in if op == HiDiv&lt;br /&gt;
     then &amp;quot;(&amp;quot; ++ x ++&amp;quot;)&amp;quot;&lt;br /&gt;
     else x&lt;br /&gt;
showExpr&amp;#039; (Div l r) op = let&lt;br /&gt;
  x = showExpr&amp;#039; l Hi ++&amp;quot;/&amp;quot;++showExpr&amp;#039; r Hi&lt;br /&gt;
  in if op == HiDiv&lt;br /&gt;
     then &amp;quot;(&amp;quot; ++ x ++&amp;quot;)&amp;quot;&lt;br /&gt;
     else x   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[File:Tryit.png|center|60px|Try it!|link=https://rextester.com/BHV96059]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Extend class Show to be usable with our expressions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: right&amp;quot;&amp;gt; [[File:Video logo.png|80px|link=https://youtu.be/NCAxJx_wJxI]]&amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Haskell&amp;quot; class=&amp;quot;myDark&amp;quot;&amp;gt;&lt;br /&gt;
*Main&amp;gt; Add (Num 1) (Num 2)&lt;br /&gt;
&amp;quot;1+2&amp;quot;&lt;br /&gt;
*Main&amp;gt; Mul (Add (Num 1) (Num 2)) (Num 3)&lt;br /&gt;
&amp;quot;(1+2)*3&amp;quot;&lt;br /&gt;
*Main&amp;gt; Mul (Add (Num 1) (Mul (Num 2) (Var &amp;#039;x&amp;#039;))) (Mul (Num 3) (Var &amp;#039;x&amp;#039;))&lt;br /&gt;
&amp;quot;(1+2*x)*3*x&amp;quot;&lt;br /&gt;
*Main&amp;gt; Mul (Num 2) (Mul (Var &amp;#039;x&amp;#039;) (Var &amp;#039;x&amp;#039;))           &lt;br /&gt;
&amp;quot;2*x*x&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-collapsetext=&amp;quot;Hide solution&amp;quot; data-expandtext=&amp;quot;Show solution&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Haskell&amp;quot;&amp;gt;&lt;br /&gt;
instance (Show Expr) where&lt;br /&gt;
  show = showExpr &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[File:Tryit.png|center|60px|Try it!|link=https://rextester.com/BHV96059]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Create function derivation representing symbolic derivation of a given expression.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Haskell&amp;quot;&amp;gt;&lt;br /&gt;
deriv :: Expr-&amp;gt; Char -&amp;gt; Expr&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Haskell&amp;quot; class=&amp;quot;myDark&amp;quot;&amp;gt;&lt;br /&gt;
*Main&amp;gt; deriv (Add (Num 1) (Num 2)) &amp;#039;x&amp;#039;&lt;br /&gt;
0+0&lt;br /&gt;
*Main&amp;gt; deriv (Mul (Num 2) (Mul (Var &amp;#039;x&amp;#039;) (Var &amp;#039;x&amp;#039;))) &amp;#039;x&amp;#039;&lt;br /&gt;
0*x*x+2*(1*x+x*1)&lt;br /&gt;
*Main&amp;gt; deriv (Mul (Num 2) (Mul (Var &amp;#039;x&amp;#039;) (Var &amp;#039;x&amp;#039;))) &amp;#039;x&amp;#039;&lt;br /&gt;
0*x*x+2*(1*x+x*1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-collapsetext=&amp;quot;Hide solution&amp;quot; data-expandtext=&amp;quot;Show solution&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Haskell&amp;quot;&amp;gt;&lt;br /&gt;
deriv :: Expr-&amp;gt; Char -&amp;gt; Expr&lt;br /&gt;
deriv (Num _) _ = (Num 0)     &lt;br /&gt;
deriv (Var x) y | x==y = (Num 1)&lt;br /&gt;
                | otherwise = (Num 0)&lt;br /&gt;
deriv (Add l r) x = Add (deriv l x) (deriv r x)                &lt;br /&gt;
deriv (Sub l r) x = Sub (deriv l x) (deriv r x)&lt;br /&gt;
deriv (Mul l r) x = Add (Mul (deriv l x) r) (Mul l (deriv r x))&lt;br /&gt;
deriv (Div l r) x = &lt;br /&gt;
   Div&lt;br /&gt;
    (Sub (Mul (deriv l x) r) (Mul l (deriv r x)))&lt;br /&gt;
    (Mul r r)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[File:Tryit.png|center|60px|Try it!|link=https://rextester.com/BHV96059]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>FuzzyBot</name></author>
		
	</entry>
</feed>