Major progress on laws
This commit is contained in:
parent
5113241a63
commit
e338e3a738
1 changed files with 25 additions and 1 deletions
|
@ -5,11 +5,17 @@ import Expr
|
|||
import Parser
|
||||
|
||||
data Law = Law LawName Equation
|
||||
deriving Show
|
||||
|
||||
type LawName = String
|
||||
type Equation = (Expr,Expr)
|
||||
|
||||
instance Show Law where
|
||||
showsPrec _ (Law name (e1, e2)) =
|
||||
showString (name ++ ": ")
|
||||
. shows e1
|
||||
. showString " = "
|
||||
. shows e2
|
||||
|
||||
law :: Parser Law
|
||||
law = do name <- upto ':'
|
||||
eqn <- equation
|
||||
|
@ -20,3 +26,21 @@ equation = do lh <- expr
|
|||
symbol "="
|
||||
rh <- expr
|
||||
return (lh, rh)
|
||||
|
||||
sortLaws :: [Law] -> [Law]
|
||||
sortLaws laws = simple ++ others ++ defn
|
||||
where (simple, nonsimple) = partition isSimple laws
|
||||
(defn, others) = partition isDefn nonsimple
|
||||
|
||||
isSimple, isDefn :: Law -> Bool
|
||||
|
||||
isSimple (Law _ (Compose a, Compose b))
|
||||
= length a > length b
|
||||
|
||||
isDefn d = case d of
|
||||
(Law _ (Compose [Con f es], _)) -> all Calculator.isVar es
|
||||
_ -> False
|
||||
|
||||
isVar v = case v of
|
||||
(Compose [Var _]) -> True
|
||||
_ -> False
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue