/**************************************************************************** Ejercicio: 1.6 Alumno: Leandro Lucarella Fecha: dom mar 27 02:20:08 ART 2005 ****************************************************************************/ functor import Application System define % Concatena un 0 al final de la lista fun {ShiftLeft L} case L of H|T then H|{ShiftLeft T} else [0] end end % Inserta un 0 al inicio de la lista fun {ShiftRight L} 0|L end % Aplica una operación entre 2 elementos de dos listas fun {OpList Op L1 L2} case L1 of H1|T1 then case L2 of H2|T2 then {Op H1 H2}|{OpList Op T1 T2} end else nil end end % Calcula variaciones del Triánculo de Pascal fun {GenericPascal Op N} if N == 1 then [1] else L in L = {GenericPascal Op N-1} {OpList Op {ShiftLeft L} {ShiftRight L}} end end % Suma fun {Sum X Y} X+Y end % Resta fun {Sub X Y} X-Y end % Multiplica fun {Mul X Y} X*Y end % Multiplica sumando 1 fun {Mul1 X Y} (X+1)*(Y+1) end % Aplicamos con distintas operaciones {System.show {GenericPascal Sum 5}} % Da los resultados esperados {System.show {GenericPascal Sub 5}} % Da los resultados esperados % Da cero porque multiplica por los 0 de las puntas {System.show {GenericPascal Mul 5}} % Da un resultado un poco extraño (aunque coerente con Mul1) {System.show {GenericPascal Mul1 5}} {Application.exit 0} end % vim: set et sw=4 sts=4 filetype=oz :