Subexpresiones aritméticas
Las expresiones aritméticas pueden representarse usando el siguiente tipo de datos
1 2 |
data Expr = N Int | S Expr Expr | P Expr Expr deriving (Eq, Ord, Show) |
Por ejemplo, la expresión 2*(3+7)
se representa por
1 |
P (N 2) (S (N 3) (N 7)) |
Definir la función
1 |
subexpresiones :: Expr -> Set Expr |
tal que (subexpresiones e) es el conjunto de las subexpresiones de e. Por ejemplo,
1 2 3 4 |
λ> subexpresiones (S (N 2) (N 3)) fromList [N 2,N 3,S (N 2) (N 3)] λ> subexpresiones (P (S (N 2) (N 2)) (N 7)) fromList [N 2,N 7,S (N 2) (N 2),P (S (N 2) (N 2)) (N 7)] |
Soluciones
[schedule expon=’2017-06-02′ expat=»06:00″]
- Las soluciones se pueden escribir en los comentarios hasta el 02 de junio.
- El código se debe escribir entre una línea con <pre lang=»haskell»> y otra con </pre>
[/schedule]
[schedule on=’2017-06-02′ at=»06:00″]
1 2 3 4 5 6 7 8 9 10 11 |
import Data.Set data Expr = N Int | S Expr Expr | P Expr Expr deriving (Eq, Ord, Show) subexpresiones :: Expr -> Set Expr subexpresiones (N x) = singleton (N x) subexpresiones (S i d) = S i d `insert` (subexpresiones i `union` subexpresiones d) subexpresiones (P i d) = P i d `insert` (subexpresiones i `union` subexpresiones d) |
[/schedule]
3 Comentarios