Plantilla:Back
Ejercicio 1
a)
Number >> pesos
^Dinero new.
Number >> centavos
^Dinero new.
b)
Number >> pesos
^Dinero withValue: self.
Number >> centavos
^Dinero withValue: self/100.
Dinero >> withValue: aNumber
^(Dinero new) value = aNumber.
Dinero >> = aDinero
^value = aDinero getValue.
Dinero >> + aDinero
^Dinero withValue: value + aDinero getValue.
Dinero >> getValue
^value.
c)
Dinero class >> actualizacion : unDiccionario
keysAndValuesDo: [:k :v | number class compile (' k, '^Dinero withValue: ', v asString, '* self')].
Ejercicio 2
a)
II)
Forma lógica:
- 1)
- 2)
- 3)
- 4)
- GOAL)
Forma clausal ():
1)
2)
3)
4)
GOAL)
b)
asignaciónValida(+declaraciones, ?asignacion)
asignaciónValida(d, asig(v1, v2)) :- member(d, decl(v1, t1)), member(d, decl(v2, t2)), v1 \= v2, subtipo(t2, t1).
c)
reemplazar(+programaConVariables, +tipos, +asignacion)
reemplazar([], _, []).
reemplazar([asig(A, B)|PCVA], T, [asig(A, B)|PCVB]) :- reemplazar(PCVA, T, PCVB).
reemplazar([decl(A, TA)|PCVA], T, [decl(B, TB)|PCVB]) :- (var(TA), member(B, TB)); (\+ var(TA), TB == TA), reemplazar(PCVA, T, PCVB).
d)
unicovalido(+programaConVariables, +tipos)
unicovalido(PCV, T) :- reemplazar(PCV, T, P), valido(P), not(reemplazar(PCV, T, P2), valido(P2), P1 \= P2).