Last active
August 29, 2015 14:13
-
-
Save lykkin/32537cca0ed8dcb6058b to your computer and use it in GitHub Desktop.
more language stuff
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
data BExp = TRUE | |
| FALSE | |
| AND BExp BExp | |
| OR BExp BExp | |
| NOT BExp | |
| QUANT QExp | |
beval :: BExp -> Bool | |
beval TRUE = True | |
beval FALSE = False | |
beval (AND left right) = (beval left) && (beval right) | |
beval (OR left right) = (beval left) || (beval right) | |
beval (NOT ex) = not (beval ex) | |
beval (QUANT ex) = (qeval ex) | |
data AExp = I Integer | |
| PLUS AExp AExp | |
| SUB AExp AExp | |
| MULTI AExp AExp | |
| DIV AExp AExp | |
aeval :: AExp -> Integer | |
aeval (I i) = i | |
aeval (PLUS left right) = (aeval left) + (aeval right) | |
aeval (SUB left right) = (aeval left) - (aeval right) | |
aeval (MULTI left right) = (aeval left) * (aeval right) | |
aeval (DIV left right) = (aeval left) `div` (aeval right) | |
data QExp = GR AExp AExp | |
| LE AExp AExp | |
| EQU AExp AExp | |
| NEQ AExp AExp | |
| LEQ AExp AExp | |
| GEQ AExp AExp | |
qeval :: QExp -> Bool | |
qeval (GR left right) = (aeval left) > (aeval right) | |
qeval (LE left right) = (aeval left) < (aeval right) | |
qeval (EQU left right) = (aeval left) == (aeval right) | |
qeval (NEQ left right) = (aeval left) /= (aeval right) | |
qeval (LEQ left right) = (aeval left) <= (aeval right) | |
qeval (GEQ left right) = (aeval left) >= (aeval right) | |
data CExp = IF BExp AExp AExp | |
ceval :: CExp -> Integer | |
ceval (IF pred valid invalid) | (beval pred) = (aeval valid) | |
| otherwise = (aeval invalid) | |
test = (ceval | |
(IF | |
(NOT | |
(QUANT | |
(GR | |
(PLUS (I 1) (I 1)) | |
(MULTI (I 2) (I 1)) | |
) | |
) | |
) | |
(SUB (I 3) (I 2)) | |
(DIV (I 6) (I 2)) | |
) | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment