Haskell — Expressions

Es vol tenir un mòdul per a manipular i avaluar expressions d’enters amb operacions de suma, resta, multiplicació i divisió. Per això, es defineix el tipus següent:

    data Expr = Val Int | Add Expr Expr | Sub Expr Expr | Mul Expr Expr | Div Expr Expr

Per exemple, Add (Val 3) (Div (Val 4) (Val 2)) representa 3+4/23 + 4 / 2, que s’avalua a 5.

1. Avaluació sense errors (20 punts)

Utilitzant el tipus Expr, definiu una operació eval1 :: Expr -> Int que, donada una expressió, en retorni la seva avaluació. Podeu suposar que mai hi haurà divisions per zero.

2. Avaluació amb indicació d’error (30 punts)

Utilitzant el tipus Expr, definiu una operació eval2 :: Expr -> Maybe Int que, donada una expressió, en retorni la seva avaluació com un valor Just. En el cas que es produeixi una divisió per zero, el resultat ha de ser Nothing. Segurament voleu usar la notació do sobre la mònada Maybe a.

3. Avaluació amb text d’error (30 punts)

Utilitzant el tipus Expr, definiu una operació eval3 :: Expr -> Either String Int que, donada una expressió, en retorni la seva avaluació com un valor Right. En el cas que es produeixi una divisió per zero, el resultat ha de ser Left "div0" per indicar l’error en qüestió. Segurament voleu usar la notació do sobre la mònada Either a b.

Informació del problema

Autoria: Jordi Petit

Generació: 2026-02-03T17:02:09.695Z

© Jutge.org, 2006–2026.
https://jutge.org