Difference between revisions of "FP Laboratory 9/cs"

From Marek Běhálek Wiki
Jump to navigation Jump to search
(Created page with "* Implementujte funkci showExpr, která převede výraz na String.")
(Updating to match new version of source page)
 
(2 intermediate revisions by one other user not shown)
Line 83: Line 83:
 
     else x
 
     else x
 
showExpr' (Div l r) op = let
 
showExpr' (Div l r) op = let
   x = showExpr' l Hi ++"/"++showExpr' r Hi
+
   x = showExpr' l Hi ++"/"++showExpr' r HiDiv
 
   in if op == HiDiv
 
   in if op == HiDiv
 
     then "(" ++ x ++")"
 
     then "(" ++ x ++")"
Line 92: Line 92:
 
<div style="clear:both"></div>
 
<div style="clear:both"></div>
  
* Extend class Show to be usable with our expressions.
+
* Rozšiřte třídu Show tak, aby ji bylo možno využít s našimi výrazy.
  
 
<div style="float: right"> [[File:Video logo.png|80px|link=https://youtu.be/NCAxJx_wJxI]]</div>  
 
<div style="float: right"> [[File:Video logo.png|80px|link=https://youtu.be/NCAxJx_wJxI]]</div>  
Line 115: Line 115:
 
<div style="clear:both"></div>
 
<div style="clear:both"></div>
  
* Create function derivation representing symbolic derivation of a given expression.
+
* Implementujte funkci derivation reprezentující symbolickou derivaci daného výrazu.
 
   
 
   
 
<syntaxhighlight lang="Haskell">
 
<syntaxhighlight lang="Haskell">

Latest revision as of 07:41, 15 November 2021

Uživatelsky definované datové typy a typové třídy

Video logo.png

Uvažujte následující reprezentaci výrazů

data Expr = Num Int
          | Add Expr Expr
          | Sub Expr Expr
          | Mul Expr Expr
          | Div Expr Expr
          | Var Char
	  deriving (Eq)
  • Implementujte funkci eval, která vyhodnocuje výrazy.
Video logo.png
eval :: Expr -> Int
*Main> eval (Add (Num 1) (Num 2))
3
*Main> eval (Mul (Add (Num 1) (Num 2)) (Num 3))
9
Show solution
  • Implementujte funkci showExpr, která převede výraz na String.
Video logo.png
showExpr :: Expr -> String
*Main> showExpr (Add (Num 1) (Num 2))
"1+2"
*Main> showExpr (Mul (Add (Num 1) (Num 2)) (Num 3))
"(1+2)*3"
*Main> showExpr (Mul (Add (Num 1) (Mul (Num 2) (Var 'x'))) (Mul (Num 3) (Var 'x')))
"(1+2*x)*3*x"
*Main> showExpr (Mul (Num 2) (Mul (Var 'x') (Var 'x')))                            
"2*x*x"
Show solution
  • Rozšiřte třídu Show tak, aby ji bylo možno využít s našimi výrazy.
Video logo.png
*Main> Add (Num 1) (Num 2)
"1+2"
*Main> Mul (Add (Num 1) (Num 2)) (Num 3)
"(1+2)*3"
*Main> Mul (Add (Num 1) (Mul (Num 2) (Var 'x'))) (Mul (Num 3) (Var 'x'))
"(1+2*x)*3*x"
*Main> Mul (Num 2) (Mul (Var 'x') (Var 'x'))           
"2*x*x"
Show solution
  • Implementujte funkci derivation reprezentující symbolickou derivaci daného výrazu.
deriv :: Expr-> Char -> Expr
*Main> deriv (Add (Num 1) (Num 2)) 'x'
0+0
*Main> deriv (Mul (Num 2) (Mul (Var 'x') (Var 'x'))) 'x'
0*x*x+2*(1*x+x*1)
*Main> deriv (Mul (Num 2) (Mul (Var 'x') (Var 'x'))) 'x'
0*x*x+2*(1*x+x*1)
Show solution