introalg:taller07_2
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
introalg:taller07_2 [2007/04/17 15:44] – nicolasw | introalg:taller07_2 [2018/08/10 03:03] (actual) – editor externo 127.0.0.1 | ||
---|---|---|---|
Línea 223: | Línea 223: | ||
Main> digitos 123123123 | Main> digitos 123123123 | ||
[3, | [3, | ||
+ | |||
+ | |||
+ | |||
Línea 232: | Línea 235: | ||
< | < | ||
- | descuento :: (Int,Bool) -> (Float,Int,Float) | + | descuento :: (Float,Bool) -> (Float,Float,Float) |
- | -- argumento: | + | -- argumento: |
- | -- resultado: una tresupla (Float,Int,Float) que representa el monto total, | + | -- resultado: una tresupla (Float,Float,Float) que representa el monto total, |
-- restando el descuento correspondiente, | -- restando el descuento correspondiente, | ||
-- y el descuento en tickets, respectivamente. | -- y el descuento en tickets, respectivamente. | ||
- | descuento x y | x == 257 && y == True = ( x - 0.2*x , 10*x, 0.1*x) | + | descuento |
- | | x == 257 && y == False = ( x - 0.2*x , 10*x, 0) | + | | x == 257 && |
- | | x == 350 && y == True = ( x - 0.2*x , 10*x, 0.1*x) | + | | x == 350 && y |
- | | x == 350 && y == False = ( x - 0.2*x , 10*x, 0) | + | | x == 350 && |
- | | x == 489 && y == True = ( x - 0.2*x , 10*x, 0.1*x) | + | | x == 489 && y |
- | | x == 489 && y == False = ( x - 0.2*x , 10*x, 0) | + | | x == 489 && |
- | | x > 1000 && y == True = ( x - 0.2*x , 10*x, 0.1*x) | + | | x > 1000 && y |
- | | x > 1000 && y == False = ( x - 0.2*x , 10*x, 0) | + | | x > 1000 && |
- | | x == 768 && y == True = ( x - 0.2*x , 10*x, 0.1*x) | + | | x == 768 && y |
- | | x == 768 && y == False = ( x - 0.2*x , 10*x, 0) | + | | x == 768 && |
- | | x == 999 && y == True = ( x - 0.2*x , 10*x, 0.1*x) | + | | x == 999 && y |
- | | x == 573 && y == False = ( x - 0.2*x , 10*x, 0) | + | | x == 573 && |
- | | x > 500 && x <= 1000 && y == True = ( x - 0.15*x , 5*x, 0.05*x) | + | | x > 500 && x <= 1000 && y = ( x - 0.15*x , 5*x, 0.05*x) |
- | | x > 500 && x <= 1000 && y == False = ( x - 0.15*x , 5*x, 0) | + | | x > 500 && x <= 1000 && |
- | | x > 200 && x <= 500 && y == True = ( x - 0.1*x , 2*x, 0.02*x) | + | | x > 200 && x <= 500 && y = ( x - 0.1*x , 2*x, 0.02*x) |
- | | x > 200 && x <= 500 && y == False = ( x - 0.1*x , 2*x, 0) | + | | x > 200 && x <= 500 && |
- | | x <= 200 = ( x , x , 0 ) | + | | x <= 200 = ( x , x , 0) |
</ | </ | ||
Línea 260: | Línea 263: | ||
< | < | ||
- | descuento :: (Int,Bool) -> (Float,Int,Float) | + | descuento' |
- | descuento (x,y) | x == 257 || x == 350 || x == 489 || x == 768 || x == 999 || x == 573 = descuento20 (x,y) | + | descuento' |
- | | x > 1000 = descuento20 (x,y) | + | |
- | | x > 500 && x <= 1000 = descuento15 (x,y) | + | |
- | | x > 200 && x <= 500 = descuento10 (x,y) | + | |
- | | x <= 200 = descuento0 (x,y) | + | |
- | descuento20 :: (Int,Bool) -> (Float,Int,Float) | + | descuento20 :: (Float,Bool) -> (Float,Float,Float) |
descuento20 (x,y) | y == True = ( x - 0.2*x , 10*x, 0.1*x) | descuento20 (x,y) | y == True = ( x - 0.2*x , 10*x, 0.1*x) | ||
| y == False = ( x - 0.2*x , 10*x, 0) | | y == False = ( x - 0.2*x , 10*x, 0) | ||
- | descuento15 :: (Int,Bool) -> (Float,Int,Float) | + | descuento15 :: (Float,Bool) -> (Float,Float,Float) |
descuento15 (x,y) | y == True = ( x - 0.15*x , 5*x, 0.05*x) | descuento15 (x,y) | y == True = ( x - 0.15*x , 5*x, 0.05*x) | ||
| y == False = ( x - 0.15*x , 5*x, 0) | | y == False = ( x - 0.15*x , 5*x, 0) | ||
- | descuento10 :: (Int,Bool) -> (Float,Int,Float) | + | descuento10 :: (Float,Bool) -> (Float,Float,Float) |
descuento10 (x,y) | y == True = ( x - 0.1*x , 2*x, 0.02*x) | descuento10 (x,y) | y == True = ( x - 0.1*x , 2*x, 0.02*x) | ||
| y == False = ( x - 0.1*x , 2*x, 0) | | y == False = ( x - 0.1*x , 2*x, 0) | ||
- | descuento0 :: (Int,Bool) -> (Float,Int,Float) | + | descuento0 :: (Float,Bool) -> (Float,Float,Float) |
- | descuento0 (x,y) = ( x , x , 0 ) | + | descuento0 (x,y) = ( x , x , 0) |
</ | </ | ||
Línea 289: | Línea 292: | ||
===== Estilo de Código (coding style) ===== | ===== Estilo de Código (coding style) ===== | ||
+ | |||
+ | |||
+ | |||
+ | |||
==== Reglas de sangrado (layout) (distribución) ==== | ==== Reglas de sangrado (layout) (distribución) ==== | ||
Línea 300: | Línea 307: | ||
* el código que forma parte de una expresión (o bloque) tiene que indentarse más adentro que la línea que contiene el principio de esa expresión. | * el código que forma parte de una expresión (o bloque) tiene que indentarse más adentro que la línea que contiene el principio de esa expresión. | ||
- | Por ejemplo, cuando usamos una lista de instrucciones de la misma clase dentro de una función, deben estar todas indentadas a la misma altura, como si estuvierna | + | Por ejemplo, cuando usamos una lista de instrucciones de la misma clase dentro de una función, deben estar todas indentadas a la misma altura, como si estuvieran |
- | area.a.b.c = 2*frente + 2*lado + 2*tapa | + | area a b c = 2*frente + 2*lado + 2*tapa |
where | where | ||
frente = a*b | frente = a*b | ||
Línea 311: | Línea 318: | ||
PREGUNTA: ¿Cómo podemos escribir esta función usando puntuación en lugar de indentación? | PREGUNTA: ¿Cómo podemos escribir esta función usando puntuación en lugar de indentación? | ||
- | Esto estaría mal si lo escribiéramos de la siguiente forma: | + | Esto sigue siendo válido |
- | area.a.b.c = 2*frente + 2*lado + 2*tapa | + | area a b c = 2*frente + 2*lado + 2*tapa |
where | where | ||
| | ||
Línea 319: | Línea 326: | ||
tapa = a*c | tapa = a*c | ||
- | Y también si lo escribiéramos así: | + | Pero no cuando las // |
- | area.a.b.c = 2*frente + 2*lado + 2*tapa | + | area a b c = 2*frente + 2*lado + 2*tapa |
where | where | ||
- | | + | |
- | lado = b*c | + | lado = b*c |
- | tapa = a*c | + | tapa = a*c |
+ | |||
+ | Simplemente no sabe que el '' | ||
+ | |||
+ | Main> :e | ||
+ | ERROR " | ||
Para ver más ejemplos, vayan al [[http:// | Para ver más ejemplos, vayan al [[http:// | ||
Línea 331: | Línea 344: | ||
Para saber más, vean la [[http:// | Para saber más, vean la [[http:// | ||
- | Y ya que estamos, sepan que toda línea que comienza por dos guiones (o signos " | + | Y ya que estamos, sepan que toda **línea** que comienza por dos guiones (o signos " |
+ | Y para evitar que se interpreten **bloques completos**, | ||
+ | |||
+ | < | ||
+ | -- Nada de esto se toma | ||
+ | {- Y esto | ||
+ | | ||
+ | -} | ||
+ | </ | ||
==== Case sensitiveness (sensibilidad a la caja) ==== | ==== Case sensitiveness (sensibilidad a la caja) ==== | ||
Línea 342: | Línea 364: | ||
* los nombres de **funciones y variables** comienzan con **minúscula** | * los nombres de **funciones y variables** comienzan con **minúscula** | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== Nombres de variables ==== | ||
+ | |||
+ | En general se intenta que el código sea auto explicativo, | ||
+ | Algo que resulta muy sencillo y útil es dar nombres significativos a las variables. | ||
+ | Podríamos haber escrito la función área de la siguiente manera. | ||
+ | |||
+ | area a1 a2 a3 = 2*a4 + 2*a5 + 2*a6 | ||
+ | where | ||
+ | a4 = a1*a2 | ||
+ | a5 = a2*a3 | ||
+ | a6 = a1*a3 | ||
+ | |||
+ | o bien de manera equivalente e igualmente eficiente, pero mucho más comprensible: | ||
+ | |||
+ | area b a p = 2*frente + 2*lado + 2*tapa | ||
+ | where | ||
+ | frente = b * a | ||
+ | lado = p * a | ||
+ | tapa = b * p | ||
+ | |||
===== Ejercicios ===== | ===== Ejercicios ===== | ||
Línea 354: | Línea 400: | ||
probar con [1,2,3], con [3,3,3] y con []. | probar con [1,2,3], con [3,3,3] y con []. | ||
- | * Definir una función // | + | * Definir una función // |
probar con [1,2,3], con [3,3,3], con [0], con [0,1] y con []. | probar con [1,2,3], con [3,3,3], con [0], con [0,1] y con []. | ||
- | * Definir una función //segundoEssegundo.(x, | + | * Definir una función //segundoEsSegundo.(x, |
probar con (1,2) y [3,2,4,5], (0,0) y [], (1,2) y [2,3,4,5]. | probar con (1,2) y [3,2,4,5], (0,0) y [], (1,2) y [2,3,4,5]. | ||
- | * Definir una función // | + | * Definir una función // |
Ayuda: fíjense que el resultado siempre debe ser una lista de caracteres! | Ayuda: fíjense que el resultado siempre debe ser una lista de caracteres! | ||
introalg/taller07_2.1176824688.txt.gz · Última modificación: 2018/08/10 03:03 (editor externo)