2-PP 2 - Conceptos
2-PP 2 - Conceptos
2-PP 2 - Conceptos
UTN
FRRe
https://www.youtube.com/watch?v=7MAeSbiLRPo
UTN
FRRe
UTN
FRRe
Valores
Llamaremos valor a algo que pueda se evaluado,
almacenado, incorporado a una estructura de datos,
pasado como argumento a un procedimiento o función,
retornado como resultado de una función etc.
Abstracción de
Valores Valores Referencias a
Punteros procedimiento
primitivos compuestos variables
y función
UTN
FRRe
Tipos
Un tipo es un conjunto de valores.
UTN
FRRe
Tipos Primitivos
UTN
FRRe
Tipos primitivos
Valor_de_verdad
{verdadero, falso}
Entero
{..., -2, -1, 0, 1, 2, ...}
Real
{..., -1.0, ..., 0.0, ..., 1.0, ...}
Carácter
{..., ‘a’, ‘b’, ..., ‘z’, ...}
UTN
FRRe
Tipos primitivos
Tipo Enumerado
Meses {ene, feb, mar, abr, may, jun,
jul, ago, sep, oct, nov, dic}
Tipo Subrango
28..31
UTN
FRRe
Cardinalidad
Ejemplo:
◼ #valor_de_verdad = 2
◼ #meses = 12
◼ #enteros = 2 x maxint + 1 (en Pascal)
UTN
FRRe
Tipos Compuestos
Un tipo compuesto (o tipo de datos
estructurado) es un tipo cuyos valores están
compuestos o estructurados a partir de valores
más simples.
◼ Tuplas
◼ Registros
◼ Arreglos
◼ Conjuntos
◼ Strings
◼ Listas
◼ Árboles
◼ Archivos secuenciales
◼ Archivos directos
UTN
FRRe
Tipos Compuestos:
Producto Cartesiano 1
UTN
FRRe
Tipos Compuestos:
Producto Cartesiano 2
S x T = { (x,y) / x S; y T}
S T
u v a b c
Cardinalidad:
UTN
FRRe
Tipos Compuestos:
Producto Cartesiano 3
Los componentes de las tuplas son tomados de un mismo S:
(n veces)
n
S = S × S × ... × S
Si n = 0
n
#S = 1 Unit = { () }
UTN
FRRe
Tipos Compuestos:
Unión Disjunta
S + T = { izq x / x S} {der y / y T}
S T
u v a b c
Cardinalidad:
UTN
FRRe
Tipos Compuestos:
Registros discriminados
type
TipoDato = (Num, Fech, Str);
Fecha = record D, M, A: Byte; end;
Ficha = record
Nombre: string[20]; (* Campo fijo *)
case Tipo: TipoDato of (* Campos variantes *)
Num: (N: real); (* Si es un número: campo N *)
Fech: (F: Fecha); (* Si es fecha: campo F *)
Str: (S: string[30]); (* Si es string: campo S *)
end;
var
UnDato: Ficha;
UnDato.Nombre := 'Nacho';
UnDato.Tipo := Num;
UnDato.N := 3.5;
Writeln('Ahora el tipo es numérico, el nombre es ', UnDato.Nombre);
Writeln('Campo N: ', UnDato.N);
UTN
FRRe
Tipos Compuestos:
Registros discriminados 2
Supongamos que se desea
almacenar datos de Soltero
personas en las que se
contempla el Estado Civil, Casado Conyuge Fecha
para el cual se guardará ApyNom Edad Estado
type
EstadoCivil = (ecSoltero, ecCasado, ecViudo, ecDivorciado);
Fecha = record D, M, A: byte; end;
Persona = record
ApyNom: string[20]; (* Campos fijos *)
Edad: integer;
case Estado: EstadoCivil of (* Campos variantes *)
ecSoltero: ();
ecCasado: (conyuge: string[20]; FBoda: Fecha);
ecViudo, ecDovorciado : (FFin: Fecha);
end;
UTN
FRRe
Tipos Compuestos:
Unión Disjunta 4
var
V1, V2, V3, V4, V5: Variant;
I: Integer;
D: Double;
S: string;
begin
V1 := 1; { integer value }
V2 := 1234.5678; { real value }
V3 := 'Hello world!’; { string value }
V4 := '1000’; { string value }
V5 := V1 + V2 + V4; { real value 2235.5678}
I := V1; { I = 1 (integer value) }
D := V2; { D = 1234.5678 (real value) }
S := V3; { S = 'Hello world!' (string value) }
I := V4; { I = 1000 (integer value) }
S := V5; { S = '2235.5678' (string value) }
end;
UTN
FRRe
Tipos Compuestos:
Unión Disjunta 5
El compilador realiza las conversiones de tipos de acuerdo a las
siguientes reglas.
UTN
FRRe
Tipos Compuestos:
Unión Disjunta 6
Se pueden definir tipos compuestos que tengan círculos y
rectángulos como valores constitutivos:
UTN
FRRe
Recreo mental!
Imagina que tienes
1000 botellas de jugo,
una de ellas contiene
un líquido súper
fuerte y de sabor
amargo.
Cómo saber cuál es la
que contiene el
líquido amargo con el
menor número de
sorbos posibles?
UTN
FRRe
Tipos Compuestos:
Mapeo
type
color = (rojo, verde, azul);
pixel = array [color] of 0..1;
0 0 1 0 1 0 1 0 1 1 1 1
rojo verde azul rojo verde azul rojo verde azul rojo verde azul
UTN
FRRe
Tipos Compuestos:
Mapeo
bool pixel[3];
F F T F T F T F T T T T
0 1 2 0 1 2 0 1 2 0 1 2
UTN
FRRe
Tipos Compuestos:
Mapeo
S → T = {m / x S m(x) T}
UTN
FRRe
Tipos Compuestos:
Mapeo. Ejemplo
S→T
S T
{u → a, v → a} {u → b, v → a} {u → c, v → a}
{u → a, v → b} {u → b, v → b} {u → c, v → b}
u v a b c {u → a, v → c} {u → b, v → c} {u → c, v → c}
Cardinalidad:
UTN
FRRe
Tipos Compuestos:
Mapeo 3
function par (n: Integer) : Boolean;
begin
Par := (n mod 2 = 0);
end;
UTN
FRRe
UTN
FRRe
Tipos Compuestos:
UTN
FRRe
Tipos Compuestos:
Tipos Recursivos. Ejemplos 2
UTN
FRRe
Tipos Compuestos:
Tipos Recursivos. Listas
{ nil }
{cons (i, nil) / i Entero }
{cons (i, cons(j, nil)) / i, j Entero }
{cons (i, cons(j, cons(k, nil))) / i, j, k Entero }
...
UTN
FRRe
Tipos Recursivos. Arboles
Árbol binario polimórfico:
Nodo
Nodo Rama
Hoja
Rama
1
(Rama (Hoja 3) (Hoja 2)) 3 2
(Hoja 1)
UTN
FRRe
Tipos Recursivos. Arboles 2
Árbol binario polimórfico:
Árbol
Nodo Rama
vacío
(Rama
(Rama (Rama Vacio 24 Vacio) 15 (Rama Vacio 27 Vacio))
10
(Rama Vacio 18 (Rama Vacio 4 Vacio))
)
UTN
FRRe
Tipos Compuestos:
Tipos Recursivos. Arboles. Ejemplo
UTN
FRRe
UTN
FRRe
UTN
FRRe
Control de Tipos
UTN
FRRe
Data types
Data types are present in programming
languages for at least three different
reasons:
◼ At the design level, as support for the
conceptual organization (effectively
controllable comments);
◼ At the program level, as support for
correctness (operaciones coherentes);
◼ At the translation level, as support for the
implementation (acceso directo a memoria).
UTN
FRRe
Control de Tipos
UTN
FRRe
Control de Tipos. Momentos
Estático
Ada, C, C++, C#, JADE, Java, Fortran, Haskell, ML,
Pascal, Scala
Dinámico
Groovy, JavaScript, Lisp, Lua, Objective-C, PHP, Prolog,
Python, Ruby, Smalltalk, Tcl
UTN
FRRe
Control de Tipos 3
Control de
Function par (n: integer): boolean;
Tipos Estático
Begin
Par := (n mod 2 = 0)
End;
Control de
Function par (n); Tipos Dinámico
Begin
Par := (n mod 2 = 0)
¿Qué ocurre en la
End;
llamada:
par (´a´)?
UTN
FRRe
Control de tipos. Analogía “A helpful analogy to understand
the value of static typing is to look at
it as putting pieces into a jigsaw
puzzle. In a statically typed
language, if a piece has the wrong
shape, it simply won't fit. In a
dynamically typed language, all the
pieces are 1x1 squares and always
fit, so you have to constantly
examine the resulting picture and
check (through testing) whether it's
correct.”
UTN
FRRe
Equivalencia de Tipos
1. Considere una operación que espera un operando del tipo T.
2. Suponga que en realidad el operando en cuestión es de tipo T’.
3. El lenguaje debe chequear si el tipo T es equivalente a T’
(T T’).
Equivalencia Estructural:
UTN
FRRe
Equivalencia de Tipos. Estructural
Si T y T’ son dos tipos primitivos.
◼ Luego T T’ si y solo sí T y T’ son idénticos.
Ej: Integer Integer.
Si T = A x B y T’ = A’ x B’.
◼ Luego T T’ si y solo sí A A’ y B B’.
Ej: Integer x Character Integer x Character
Si T = A + B y T’ = A’ + B’.
◼ Luego T T’ si y solo sí A A’ y B B’ o A B’ y B A’.
Ej: Integer + Character Character + Integer
Si T = A → B y T’ = A’ → B’.
◼ Luego T T’ si y solo sí A A’ y B B’.
Ej: Integer → Character Integer → Character
UTN
FRRe
Equivalencia de Tipos. De Nombres.
Equivalencia de Nombres
UTN
FRRe
Type Systems
UTN
FRRe
¿Probamos algo?
¿Qué podríamos
hacer para validar la
técnica que tiene un
lenguaje de
programación para
la equivalencia de
tipos?
UTN
FRRe
Principio de Completitud de Tipos
“Las operaciones que se puedan realizar con los
valores pertenecientes a un tipo, no deberían ser
arbitrariamente restringidas al mismo”.
Este principio debe contribuir a que los lenguajes no posean restricciones sobre
las operaciones que pueden aplicarse a valores de determinados tipos y de esa
manera reducir la potencialidad de un lenguaje de programación.
Sin embargo, una restricción podría justificarse por otra, conflicto,
consideraciones de diseño, etc.
Ejemplos:
•Se pueden pasar funciones como argumento
map par [1,1,2,3]; map cuadrado [1,1,2,3]
•Se pueden devolver funciones como resultado de otra función
(may 4) 7; map (may 4) [3,3,6,7,8,3]
•Se pueden almacenar funciones dentro de otras estructuras
mapping [cuadrado, doble] 4
UTN
FRRe
UTN
FRRe
73… el mejor número?
UTN https://www.youtube.com/watch?v=R7hTUxzbH48&t=249s
FRRe https://www.youtube.com/watch?v=ShkAMt0Ye2o
Sistemas de Tipos
Cada constante, variable, resultado de
función y parámetro formal, deben
declararse con un tipo específico.
Monomórficos
Polimórficos
Se utilizan estrategias que relajan el
control de tipos.
UTN
FRRe
Sistemas de Tipos Polimórficos
Polimorfismo de Parámetros: es una propiedad de una
única abstracción que tiene una (amplia) gama de tipos
relacionados; la abstracción opera uniformemente sobre sus
argumentos cualquiera sea su tipo.
UTN
FRRe
Polimorfismo de Parámetros
Las abstracciones operan uniformemente sobre argumentos
de una amplia gama de tipos.
type conjNum = set of 1..10; Tipo de la función:
1..10 x 1..10 → boolean
function disjunto (s1, s2: conjNum) : boolean;
begin
disjunto := (s1 * s2 = []);
end;
var
numeros : conjNum;
begin
numeros := [9,2,5];
if disjunto (numeros, [1,2,3])
then writeln ('Son disjuntos')
else writeln ('No son disjuntos');
end.
UTN
FRRe
Polimorfismo de Parámetros 2
En un sistema de tipos polimórfico, las abstracciones pueden
operar uniformemente sobre argumentos de una amplia
gama de tipos.
Ejemplo 2:
fun segundo (x: int, y: int) = y fun segundo (x: , y: ) = y
UTN
FRRe
Polimorfismo de Inclusión
En un sistema de tipos donde los tipos pueden tener subtipos
que heredan operaciones del tipo padre. Específicamente
caracteriza a los OOL donde las clases pueden tener
subclases que heredan los métodos de la superclase.
UTN
FRRe
Polimorfismo de Inclusión
En general, si C es una clase, esta incluye, no solo objetos de la
clase C, sino también objetos de cualquier subclase de C.
Cada objeto de la subclase, potencialmente hereda, todas los
métodos de la clase C.
UTN
FRRe
¿Probamos algo?
¿Vemos cómo
funciona el
polimorfismo de
inclusión?
polimor.cpp
UTN
FRRe
Sobrecarga
Un identificador u operador se dice que está sobrecargado
si denota simultáneamente dos o más funciones distintas en
el mismo entorno.
UTN
FRRe
Sobrecarga
Definamos una función suma de
complejos
fun suma (c1: complex, c2: complex) -> complex
{
z: complex
UTN
FRRe
Sobrecarga
Definamos una función suma de
polinomios
UTN
FRRe
Sobrecarga… un ejemplo más
fun div (a: int; b: int) : int; 1
{ ... }
C1 = -3 + 4i
C2 = 5 – 2i
C1 + C2
UTN
FRRe
Sobrecarga 3
I denota a una función f1: S1 → T1
f2: S2 → T2
UTN
FRRe
Conversiones de Tipos
Una conversión de tipos es un mapeo entre valores de
un tipo a valores de un tipo diferente.
Ejemplos
◼ Mapeos de valores a otros matemáticamente iguales (enteros a
reales)
◼ Mapeos de valores a otros próximos (mediante truncamiento o
redondeo)
◼ Mapeos 1 a 1 (caracteres a strings de longitud 1)
◼ Mapeos totales (caracteres a ASCII)
◼ Mapeos parciales (ASCII a caracteres)
UTN
FRRe
Conversiones de Tipos. Clasificación
Ej: sqrt (n) >> la función sqrt espera un argumento del tipo real,
pero n es de tipo entero, se realiza el siguiente mapeo:
{..., -2 → -2.0, -1 → -1.0, 0 → 0.0, 1 → 1.0, 2 → 2.0, ...}
UTN
FRRe
Tipos parametrizados
Un tipo parametrizado es aquel que toma otro/s tipo/s como
parámetros
◼ Como ejemplo podemos considerar la construcción de tipos arreglo en C o
Pascal: Tipos predefinidos parametrizados
int []; float[]; array [S] of T
UTN
FRRe
UTN
FRRe
5 minutos para un recreo mental!
Hay 3 cajas cargadas con frutas, una tiene solo manzanas, otra tiene solo
naranjas y la última tiene manzanas y naranjas revueltas. Las 3 están
etiquetadas con manzanas, naranjas y manzanas+naranjas pero
erróneamente.
¿Puedes abrir solo una, sacar una fruta sin asomarte en el interior y aún así
etiquetar las tres cajas correctamente con tan solo ver esa fruta?
UTN
FRRe
Contenidos 2
UTN
FRRe
Variables y Actualizaciones
En lenguajes imperativos, OOL y concurrentes, una
variable es el contenedor de un valor, este valor
puede ser inspeccionado y actualizado tanto como se
desee.
◼ Vida Corta: Las variables que se crean y se usan en
un programa particular, tales variables son
típicamente actualizadas por la asignación.
◼ Larga Vida: Archivos y bases de datos.
UTN
FRRe
Variables y Actualizaciones
Declaración:
var n: Integer NoReservado
Reservado
n
0
1
UTN
FRRe
Tiempo de Vida de una Variable
Variables globales y locales
El intervalo entre la creación y la eliminación es
llamado tiempo de vida de una variable.
program P;
var x: ...;
procedure Q; eP eQ eR sR sQ eR sR sP
var y: ...;
begin
... R ... Vida de z
end
procedure R;
var z: ...; Vida de y Vida de z
begin
... Vida de x
end;
begin
... Q ... R ...
end.
UTN
FRRe
Tiempo de Vida de una Variable 2
Variables de pila
◼ Este tipo de variables pueden ser creadas y
borradas en cualquier momento. Se crean y se
destruyen con un comando. Son anónimas y
pueden ser accedidas a través de un puntero.
Variables Persistentes
◼ Una variable persistente es aquella cuyo tiempo
de vida va más allá del tiempo de ejecución de
un determinado programa
UTN
FRRe
¿Probamos algo?
¿Podremos crear
algunas variables de
pila y validar que su
vida excede la
estructura de
bloques?
fpc var_pila.pas
.\var_pila.exe
UTN
FRRe
Enlace y Ámbito
Enlace
◼ Es una asociación fija entre un identificador con una
entidad tales como constantes, variables, procedimientos,
funciones y tipos.
◼ La buena elección de identificadores ayuda a hacer que los
programas sean más comprensibles y fáciles de interpretar.
◼ Más aún, relacionar un identificador con una entidad en un
lugar y luego utilizar ese identificador para hacer referencia
a esa entidad en otros lugares, hace que los programas
sean más flexibles.
UTN
FRRe
Enlace y Ámbito 2
Ámbito
◼ Un entorno o ámbito (o espacio de nombres) es
un conjunto de enlaces.
UTN
FRRe
Enlace y Ámbito 3
program p; {
const z = 0; c → una variable de tipo carácter,
var c: char; q → un procedimiento,
z → el entero 0
procedure q;
}
const c = 3.0e6;
var b: boolean;
begin {
b → una variable que contendrá un
2 ... valor de verdad,
end; c → el número real 3000000.0,
begin q → un procedimiento,
1 ... z → un entero 0
end. }
UTN
FRRe
Alcance y Visibilidad
En general cada declaración tiene un cierto alcance,
que tiene que ver con la porción del programa sobre
el cual al declaración es efectiva.
Declaración de x
Declaración de y
? Alcance de la declaración de y
UTN
FRRe
Visibility Rules
UTN
FRRe
Scope
Definiciones Previas
Ocurrencia de Enlace de un Identificador: es el
punto en donde un identificador se declara.
Ocurrencia de Aplicación de un Identificador:
cuando denota a la entidad a la cual fue enlazado.
Ocurrencia de Enlace
const n = 7
Ocurrencia de Aplicación 1
n * (n+1)
Ocurrencia de Aplicación 2
UTN
FRRe
Scope
const s = 2;
function escalar (d: integer): integer;
begin
escalar := d * s; Cuál es la respuesta
end; que dará la función
escalar en los
procedure ... ;
const s = 3; puntos 1 y 2? ??
begin
2 ... escalar (h) ...
end;
begin
1 ... escalar (h) ...
end.
UTN
FRRe
Scope
Tipos
El scope estático y dinámico tiene que ver con el momento en
que determinamos que ocurrencia de enlace del
identificador I se corresponde con la ocurrencia de
aplicación de I.
UTN
FRRe
Ejemplo
{const x = 0;
void fie(){ Cuál es la respuesta
write(x); 1 que dará la función
} write en el punto 1?
void foo(){
const x = 1;
{const x = 2;
}
fie();
}
foo();
}
UTN
FRRe
Alcance y Lenguajes de Programación
La mayoría de los lenguajes de
programación, tales como C, java,
Ada tienen alcance estático.
const ss == 2;
const 2;
0.5;
function escalar (d: integer): integer; Qué pasará si
begin cambiamos la
escalar := d * s; constante global s
end; por 0.5?
procedure ... ;
const s = 3;
begin
2 ... escalar (h) ...
end;
begin
1 ... escalar (h) ...
end.
UTN
FRRe
Contenidos 3
UTN
FRRe
Abstracciones
Instrucciones para subir una escalera
Nadie habrá dejado de observar que con frecuencia el suelo se pliega de manera tal que una parte
sube en ángulo recto con el plano del suelo, y luego la parte siguiente se coloca paralela a este plano, para dar
paso a una nueva perpendicular, conducta que se repite en espiral o en línea quebrada hasta alturas
sumamente variables. Agachándose y poniendo la mano izquierda en una de las partes verticales, y la derecha
en la horizontal correspondiente, se está en posesión momentánea de un peldaño o escalón. Cada uno de estos
peldaños, formados como se ve por dos elementos, se situó un tanto más arriba y adelante que el anterior,
principio que da sentido a la escalera, ya que cualquiera otra combinación producirá formas quizá más bellas o
pintorescas, pero incapaces de trasladar de una planta baja a un primer piso.
Las escaleras se suben de frente, pues hacia atrás o de costado resultan particularmente
incómodas. La actitud natural consiste en mantenerse de pie, los brazos colgando sin esfuerzo, la cabeza
erguida aunque no tanto que los ojos dejen de ver los peldaños inmediatamente superiores al que se pisa, y
respirando lenta y regularmente. Para subir una escalera se comienza por levantar esa parte del cuerpo situada
a la derecha abajo, envuelta casi siempre en cuero o gamuza, y que salvo excepciones cabe exactamente en el
escalón. Puesta en el primer peldaño dicha parte, que para abreviar llamaremos pie, se recoge la parte
equivalente de la izquierda (también llamada pie, pero que no ha de confundirse con el pie antes citado), y
llevándola a la altura del pie, se le hace seguir hasta colocarla en el segundo peldaño, con lo cual en éste
descansará el pie, y en el primero descansará el pie. (Los primeros peldaños son siempre los más difíciles, hasta
adquirir la coordinación necesaria. La coincidencia de nombre entre el pie y el pie hace difícil la explicación.
Cuídese especialmente de no levantar al mismo tiempo el pie y el pie).
Llegando en esta forma al segundo peldaño, basta repetir alternadamente los movimientos hasta
encontrarse con el final de la escalera. Se sale de ella fácilmente, con un ligero golpe de talón que la fija en su
sitio, del que no se moverá hasta el momento del descenso.
UTN
FRRe
Abstracciones
Abstracción es un modo de pensamiento en el cual
nos concentramos en las ideas generales más que en
las manifestaciones específicas de estas ideas.
UTN
FRRe
Abstractions
◼ de Función
function I (fp1; ... ; fpn) : T;
(C)uerpo
◼ de Procedimiento
procedure I (fp1; ... ; fpn);
(C)uerpo
UTN
FRRe
Parámetros
Aumentan la potencia del concepto de Abstracción.
UTN
FRRe
Paso de Parámetros
Mecanismo de copia
UTN
FRRe
Paso de Parámetros
Mecanismo de copia 1
Un parámetro por valor es una variable local X que se
crea a la entrada de la abstracción y se le asigna el valor
del argumento. Debido a que X se comporta como una
variable local, su valor puede ser inspeccionado y
actualizado. Sin embargo cualquier actualización de X no
tiene efecto en ninguna variable fuera del procedimiento.
UTN
FRRe
Paso de Parámetros
Mecanismo de copia 3
Parámetro
Una variable - argumento := X
resultado
Parámetro valor-
Una variable X:= argumento argumento := X
resultado
UTN
FRRe
Paso de Parámetros
Mecanismo por Referencia
Este mecanismo permite que un parámetro formal, sea enlazado
directamente al argumento.
UTN
FRRe
Paso de Parámetros
Mecanismo por Referencia 2
type vector = array [1..n] of real;
UTN
FRRe
Paso de Parámetros
Mecanismo por Referencia 3
Mecanismo Efecto en la
Efecto de
Argumento llamada al
salida
procedimiento
Parámetro Enlaza PF al
Constante Valor argumento -
valor
Parámetro Enlaza PF al
Variable Variable argumento -
variable
Parámetro Enlaza PF al
Procedimiento -
Procedural procedimiento
UTN
FRRe
Paso de Parámetros
UTN
FRRe
Paso de Parámetros
Mecanismo por Referencia 2: Alias
Una desventaja de los parámetros variable es la
posibilidad de crear alias.
Esto ocurre cuando dos o más identificadores son
simultáneamente enlazados a la misma variable.
UTN
FRRe
Parámetros
Orden de Evaluación
UTN
FRRe
Parámetros
Orden de Evaluación
Impaciente Perezoso
UTN
FRRe
Parámetros
Orden de Evaluación 2
Ej. 1:
fun sqr (n: int) = n * n
Si p = 2 y q = 5.
sqr (p + q)
UTN
FRRe
Parámetros
Orden de Evaluación 4
Evaluación perezosa
(lazy evaluation)
Ejemplos
enumFrom n
take m (enumFrom n)
sum (take m (enumFrom n))
UTN
FRRe
Parámetros
Funciones Estrictas y No Estrictas
Ej. 2:
fun cand (b1, b2 : bool) =
if b1 then b2 else false
Función
Con n = 2 yEstricta:
t = 0.8
EvaluaciónaImpaciente?
Una llamada función puede Falso solo si sus
evaluarse
Evaluación en Orden Normal?
argumentos pueden ser evaluados. Falso
Función No Estricta:
Con n = 0 y t = 0.8:
Una llamada
EvaluaciónaImpaciente?
esta función puede Falla
a veces
por evaluarse
División por 0
aún cuando algún
Evaluación argumento
en Orden Normal?no pueda
Falsoser evaluado.
UTN
FRRe