]> git.llucax.com Git - z.facultad/75.31/ejercicios.git/blob - 1.6.oz
Ejercicios del capítulo 2.
[z.facultad/75.31/ejercicios.git] / 1.6.oz
1 /****************************************************************************
2 Ejercicio: 1.6
3 Alumno: Leandro Lucarella
4 Fecha: dom mar 27 02:20:08 ART 2005
5 ****************************************************************************/
6
7 functor
8 import
9     Application
10     System
11 define
12     % Concatena un 0 al final de la lista
13     fun {ShiftLeft L}
14         case L of H|T then
15             H|{ShiftLeft T}
16         else [0] end
17     end
18     % Inserta un 0 al inicio de la lista
19     fun {ShiftRight L} 0|L end
20     % Aplica una operación entre 2 elementos de dos listas
21     fun {OpList Op L1 L2}
22         case L1 of H1|T1 then
23             case L2 of H2|T2 then
24                 {Op H1 H2}|{OpList Op T1 T2}
25             end
26         else nil end
27     end
28     % Calcula variaciones del Triánculo de Pascal
29     fun {GenericPascal Op N}
30         if N == 1 then [1]
31         else L in
32             L = {GenericPascal Op N-1}
33             {OpList Op {ShiftLeft L} {ShiftRight L}}
34         end
35     end
36     % Suma
37     fun {Sum X Y} X+Y end
38     % Resta
39     fun {Sub X Y} X-Y end
40     % Multiplica
41     fun {Mul X Y} X*Y end
42     % Multiplica sumando 1
43     fun {Mul1 X Y} (X+1)*(Y+1) end
44     % Aplicamos con distintas operaciones
45     {System.show {GenericPascal Sum 5}} % Da los resultados esperados
46     {System.show {GenericPascal Sub 5}} % Da los resultados esperados
47     % Da cero porque multiplica por los 0 de las puntas
48     {System.show {GenericPascal Mul 5}}
49     % Da un resultado un poco extraño (aunque coerente con Mul1)
50     {System.show {GenericPascal Mul1 5}}
51     {Application.exit 0}
52 end
53
54 % vim: set et sw=4 sts=4 filetype=oz :