You are on page 1of 15

Pequeo Manual de ISetL

0. Informacin sobre el software. 1. Introduccin. 2. Ventana de Ejecucin. 2.1 Definiciones y evaluacin de expresiones 2.2 Expresiones y operaciones 2.2.1 Clusula if 2.2.2 Constantes, variables y expresiones compuestas * Constantes y variables * Expresiones booleanas * Conjuntos * Tuplas y Strings * Funciones: - Definiciones recursivas. - Aplicacin y composicin - Definiciones locales. 2.3 Directivas. 2.4 Cdigo. 3. Ventana Grfica. 4. Glosario 5. Referencias 6. Apndice A: Limitaciones de ISetL. 7. Apndice B: Situaciones de sintaxis incorrecta.

0. Informacin sobre el software


El programa y la documentacin sobre el mismo se encuentran en el sitio de Internet: http://isetlw.muc.edu/isetlw El programa es de libre distribucin.

1. Introduccin
ISetL pertenece a un paradigma de lenguajes de programacin, llamado lenguaje de programacin matemtica. Los lenguajes de este paradigma se caracterizan por poseer una sintaxis similar a la notacin matemtica estndar. Algunos lenguajes de este paradigma son Maple, Mathematica, Matlab, Derive, Cabri, etc, donde algunos han sido desarrollados para la investigacin en matemtica, por ejemplo Maple. ISetL por el contrario es especfico para la enseanza de matemtica, especialmente para cursos de grado.
ISetL es un lenguaje de programacin interactivo. Entre otras cosas esto significa que la comunicacin con el usuario se realiza por medio de sesiones (ver Glosario). Para iniciar una sesin con ISetL, se hace doble click sobre el icono de ISETLW, con lo cual se arranca el programa y aparecen en pantalla dos ventanas: la ventana de ejecucin y la ventana grfica. Es en la primera donde el usuario desarrolla su sesin, en la segunda aparecen las representaciones grficas cuando es necesario (por ejemplo, de una relacin o de una funcin). Para abandonar una sesin, se hace click en la palabra exit de la barra superior, o se ingresa la directiva !quit (ver directivas). La ventana grfica no es usada en general en un curso de matemtica discreta (ver Apndice A), por lo cual puede bajarse a la barra inferior de la pantalla cliqueando en el cuadradito superior derecho que tiene un - (ISetL no permite cerrarla).

Para trabajar con ISetL se cuenta con objetos predefinidos. Estos son objetos que ISetL reconoce y que el usuario puede utilizar sin necesidad de definirlos previamente. Tales son por ejemplo las constantes numricas, las operaciones aritmticas, el conjunto vaco, las operaciones bsicas con conjuntos, etc. Si bien ISetL es adecuado para la enseanza, es necesario tener en cuenta algunas carencias que deben ser sealadas, por ejemplo que no es un lenguaje tipado, que la definicin de las funciones y de los procedimientos es confusa, etc. Para ms detalles ver el apndice A. En la barra de men, se encuentra la palabra Help. Cliqueando en ella, se abren varias opciones para obtener ayuda sobre ISetL. Cliqueando en la primera de ellas, Contents, se accede a un manual on-line de ISetL y dentro del mismo, en ISETL Language reference se tiene Predefined routines y Reserved words, con una descripcin de los objetos predefinidos.

2. Ventana de Ejecucin
Al iniciar una sesin en ISetL, aparece en la ventana de ejecucin, el smbolo >, que indica que ISetL est pronto para interactuar con el usuario. Las frases (ver Glosario) que ISetL comprende son: expresiones, definiciones, directivas y fragmentos de cdigo. Cada frase puede comprender ms de un rengln, el smbolo >> indica que la frase est incompleta. Cada frase debe terminar con el smbolo ;. El signo $ se utiliza para introducir comentarios, los cuales son ignorados por ISetL.

2.1 Definiciones y Evaluacin de expresiones


Las definiciones permiten extender el conjunto de objetos predefinidos con otros definidos por el usuario. Ejemplo:
> > > x:=2; $ este es un comentario $ se define la variable x y se le asocia el

$ valor 2 A:={0,2,4,6}; $ se define la variable A y se le asocia el $ conjunto (valor) {0,2,4,6} > p:= x in A; $ se define p como el valor de la expresin $ x A (true)

El smbolo := se lee se define como. La sintaxis de una definicin es: nombre := expresin; donde nombre es cualquier palabra no reservada (ver reserved words en el manual online) y expresin es cualquiera de las que se describen mas adelante. Evaluacin de expresiones Las expresiones son evaluadas por ISetL hasta su forma cannica (valor). Si sta existe, ISetL la imprime en pantalla, si no, imprime la palabra OM, que representa el objeto indefinido, o imprime un mensaje de error. Ejemplos:

> 2 + 3; 5; $ valor > 2 / 0; Error: Divide by zero $ el error

$ la funcin suma aplicada a 2 y 3 $ ISetL evala la expresin e imprime su $ al intentar evaluar esta expresin $ no llega a la forma cannica y reconoce

> 2 * y; Error : 2 * OM

$ y es una variable indefinida $ por lo tanto la expresin no tiene forma $ cannica

2.2 Expresiones y operaciones


Las expresiones pueden ser: constantes variables expresiones formadas por operaciones aplicadas a expresiones Cada tipo de expresin tiene operaciones que le corresponden, que pueden ser o bien predefinidas o bien definidas por el usuario. Por ejemplo, podemos sumar dos expresiones enteras o hallar la unin entre dos conjuntos, pero no tiene sentido pretender hacer la unin de un nmero y un conjunto. El usuario puede definir una funcin que halle el mximo comn divisor de dos nmeros, y no tiene sentido que defina esa funcin para objetos de otro tipo. 2.2.1 Clusula if Las expresiones que llamamos Clusula if se describen a continuacin: La clusula condicional if, puede escribirse de dos formas : clusula if

if condicin then lista de frases de ISetL ; end; if condicin then lista de frases de ISetL ; else lista de frases de ISetL ; end;

La ejecucin de esta clusula requiere la evaluacin de la expresin booleana condicin. Si esta expresin es verdadera, se ejecuta la lista de frases inmediatamente posterior a then. En caso contrario, se termina la ejecucin de la clusula if exitosamente o se ejecuta la lista de frases inmediatamente posterior a else, segn corresponda. Observar que en ambos casos las clusulas if, finalizan con la palabra reservada end.
La lista de frases de ISetL indicada despus del then o del else es cualquiera vlida, inclusive un if, como se ve en la definicin de la funcin mcd (mximo comn divisor) ms adelante.

2.2.2 Constantes, variables y expresiones compuestas

* Las constantes pueden ser: constantes booleanas: true, false constantes numricas: naturales, enteros, reales (en su representacin decimal) conjuntos finitos tuplas finitas funciones * Las variables en ISetL pueden denotar cualquier expresin. Como ISetL no es un lenguaje tipado, las variables no tienen tipo (o los tienen todos) y lo que determina el tipo de la expresin en algunos casos, es la operacin involucrada. Por ejemplo en las expresiones, not p p and q p or q p impl q se deduce por las operaciones lgicas (no, y, o e implica) que las variables son booleanas. Sin embargo como en algunas operaciones estn sobrecargadas (se usa el mismo smbolo para operaciones distintas) no siempre es claro que tipo tiene la expresin. Por ejemplo en m+n m y n podran ser variables numricas, conjuntos o tuplas (ver Apndice A). A las expresiones formadas por operaciones aplicadas a otras expresiones les llamamos expresiones compuestas. * Las expresiones booleanas son aquellas que al ser evaluadas, dan un valor del conjunto Bool, es decir, true o false. Ejemplos:
> 2*3 > 4; true; > forall n in [1..100] | not (n div 10) = 9; false; > exists n in [1..100] | not (n div 10) = 9; true; > y div 10 = 9; !Error: Bad arguments in: OM div 10; Observar que si la expresin contiene variables, estas deben estar o bien definidas (tener un valor asociado), o ser ligadas por el cuantificador forall (para todo) o el cuantificador exists (existe) para que pueda ser evaluada, si no el valor es indefinido.

* Conjuntos
En ISetL se pueden representar conjuntos finitos solamente, ya sea por extensin o por comprensin. Por extensin se indican los elementos entre llaves y separados por comas como en matemtica; si los elementos estn en progresin aritmtica, se indican los dos primeros, dos puntos seguidos y el ltimo elemento (o uno inmediatamente mayor, ver tercer ejemplo a continuacin); si la razn es 1 se indican solo el primero y el ltimo, separados por dos puntos. Ejemplos:

> > >

{0,7,2,-1,5}; {1 .. 10}; {-0.4,0.4 .. 3}

$ es el conjunto de nmeros naturales $ consecutivos del 1 al 10 $ es el conjunto {-0.4,0.4, 1.2, 2.0, 2.8}

Por comprensin, tambin la notacin es similar a la matemtica: por ejemplo, el conjunto { x : x {1,2,...,50} | x es mltiplo de 2} se puede escribir en ISetL de las siguientes maneras, entre otras:
> > { x : x in {1..50} | even(x)}; { x : x in {1..50} | x mod 2 = 0}; > { 2 * x : x in {1..25}};

even es una funcin predefinida que testa si un nmero es par, mod es una funcin predefinida que devuelve el resto de la divisin entera de un nmero por otro (ver predefined routines en el manual on-line). En el ltimo caso se muestra que no es necesario indicar la condicin que deben cumplir los elementos, pues ya se indica en la expresin 2*x. Observar que no se puede indicar como dominio N o Z por ejemplo, ya que ISetL no permite trabajar con conjuntos infinitos. La sintaxis general es:
{ expresin : especificador de dominio | condicin};

donde el especificador de dominio indica el conjunto al que pertenece la o las variable/s, que aparecen en expresin, y la condicin debe ser una expresin booleana, es decir que al ser evaluada sea verdadera o falsa. Operaciones predefinidas para los conjuntos: A union B o A + B (unin de A y B) A inter B o A * B (interseccin de A y B) A B (conjunto de elementos de A que no estn en B) A subset B (true si A es subconjunto de B,false si no) x in A (true si x A, false si no) #A (nmero de elementos de A) pow(A) (conjunto de subconjuntos de A)

* Tuplas y strings
La sintaxis es similar a la de conjuntos pero se escriben corchetes en vez de llaves: Ejemplos: [2,3] es un par ordenado. [a,1, {}] es una terna. Los caracteres pertenecen a un conjunto de smbolos que pueden representarse en la computadora. En ISetL se denotan entre comillas. Ejemplo: $, , a, A, 0, 1,

etc. Observar que el carcter 1 no es el nmero natural 1 y que el espacio en blanco es un carcter. Los strings son tuplas de caracteres y para denotarlos, se usa una abreviacin como sigue: [I,S,e,t,L] se escribe ISetL. Operaciones predefinidas para tuplas: El smbolo + se utiliza para denotar la concatenacin de tuplas, por ejemplo: cuarenta + y + seis es cuarenta y seis. Podemos acceder a los elementos de una tupla, de a uno o en un intervalo: > [1,2](1); 1; > [1,2,3,4,5](1..3); [1, 2, 3];
En general : [a1, a2, , an] (i) es el i-simo elemento de la tupla, con 1 i n. [a1, a2, , an] (i ..j) es la tupla de los elementos de [a1, a2, , an] entre i y j.

* Funciones
Las funciones pueden representarse en ISetL como conjuntos de pares ordenados (smap) o como reglas de transformacin (func), o sea como elementos de un conjunto A B, donde A es el conjunto de elementos a los cuales puede aplicarse la regla (dominio) y B es el conjunto de elementos que resultan al aplicar la regla (co-dominio). Notar que esta manera de definir funciones es incompleta, ya que no se explicita el dominio y el codominio (ver Apndice A). Ejemplos:
$ smap f := {[1,3],[3,5],[6,7]}; $ pares > is_map(f); true; > > > $ se define f como un conjunto de $ is_map es una funcin predefinida

$ regla de transformacin doble:=func(x); >> if is_number (x) then >> return 2 *x; >> end; >> end; >

Esta ltima definicin se lee as: se define doble como una funcin que toma un nmero x y devuelve 2*x. Las palabras reservadas func, return y end siempre deben aparecer en la definicin de una funcin. A continuacin de func, se indica la lista de argumentos, en este caso x (de existir ms de 1 argumento, stos se separan con coma), a continuacin de return se indica lo que devuelve y se termina la definicin con end; En este caso, la regla de transformacin (mtodo o algoritmo) est descrita por la expresin 2*x.

>

is_func(doble);

true; > is_map(doble); false;

$ is_func es una funcin $ predefinida $ is_map es una funcin $ predefinida

Como desgraciadamente en ISetL no se exige indicar el dominio y co-dominio como parte de la definicin de la funcin, comenzamos con la clusula if is_number (x) etc, de modo de asegurar que x pertenece al dominio correcto (ver Apndice A). En caso de que x no sea un nmero, la funcin devuelve OM, lo cual es coherente con el concepto matemtico de existencia. La operacin predefinida en ISetL para las funciones es la aplicacin de una funcin a un argumento Los argumentos de una funcin tambin son expresiones. Ejemplos:
> 3; f(1) $ quin es el correspondiente de 1 en f? $ aplicacin de doble a -3 $ aplicacin de doble a a

> doble(-3); -6; > doble(a); OM;

- Definiciones recursivas de funciones Los algoritmos recursivos se implementan en ISetL muy fcilmente. Por ejemplo, el algoritmo de Euclides para hallar el mximo comn divisor de dos nmeros, que llamamos mcd, se escribe en ISetL como sigue:
mcd:=func(x,y); if is_number(x) and is_number(y) then if y = 0 then return x; $ paso base >> else >> return mcd(y, x mod y); $ paso inductivo >> end; $ fin del segundo if >> end; $ fin del primer if >> end; $ fin de la definicin de la funcin >> >> >> >

Esta definicin es recursiva (pues el algoritmo de Euclides lo es), lo que significa que hay al menos un caso base y un caso inductivo. En este ejemplo, tenemos el caso base cuando el segundo nmero del par de argumentos es 0 (y el resultado es el primero) y un caso inductivo en el que el algoritmo se aplica recursivamente a otro par de argumentos, tal que el segundo nmero es menor. De esta forma, se asegura que el algoritmo llegue al caso base y devuelva un resultado (termine). Para cada caso (base e inductivo) debe haber un return en la definicin de la funcin.

Ejemplo de aplicacin:
> 3; mcd(18,15); $ esta expresin es la aplicacin de la funcin $ mcd a 18 y 15 $ resultado de la aplicacin

La definicin en ISetL asocia el nombre mcd con un elemento del conjunto de funciones Z x Z Z, descrito por la regla correspondiente (algoritmo). Cuando se aplica una funcin, ISetL usa la regla asociada al nombre para realizar el cmputo y obtener el resultado.
> mcd; $ preguntamos a ISetL qu es mcd !func(17)!; $ responde que es una funcin. Los signos ! y el $ nmero 17 los usa ISetL para su organizacin interna

La composicin de funciones NO es predefinida en ISetL y se define en el curso. Definiciones locales

La sintaxis general de definicin de funcion es:

nombre := func(lista de argumentos); descripcin del algoritmo;


return expresin;

end; Sin embargo, pueden usarse definiciones locales, en cuyo caso, la sintaxis es: nombre := func(lista de argumentos); definiciones locales descripcin del algoritmo; return expresin; end; Al igual que en matemtica podemos usar definiciones locales en una definicin de una funcin. Ejemplo: calcular las races de una ecuacin de segundo grado de coeficientes a, b, c. En la frmula matemtica se utiliza una variable local usualmente llamada delta para el discriminante. Podemos representarlo en ISetL como sigue:
> races:=func(a,b,c); local delta:=b**2-4*a*c; $ definicin de variable local $ (en matemtica decimos sea $ delta ) if delta < 0 then print no existen races reales; else if delta = 0 then return b/2*a; else return [(b + sqrt(delta))/ 2*a, (-b sqrt(delta))/2*a]; end; end; end;

>>

>> >> >> >> >> >> >>

>>

>>

sqrt es una funcin predefinida que calcula la raz cuadrada de un nmero. Dentro de la definicin de la funcin races, se define una variable local, delta, que se utiliza para abreviar y clarificar el resto de la definicin. La variable es local ya que no existe fuera de la definicin de la funcin races. La sentencia que comienza con print en el programa arriba, es lo que llamamos fragmentos de cdigo y se explica en la seccin Cdigo, un poco ms adelante.

2.3 Directivas
Las directivas son frases con las que ISetL se comunica con el sistema operativo (Windows, en este caso). Se escriben comenzando con el smbolo ! y sin el punto y coma final. Las ms usadas son:
> > > !include pepe $ las definiciones en el $ archivo pepe se agregan a las $ predefinidas !clear $ borra la pantalla !quit $ se abandona la sesin

2.4 Cdigo
En este curso utilizaremos muy pocas veces fragmentos de cdigo, ya que para los conceptos del curso, son innecesarios y lo que es ms importante, no tienen una interpretacin matemtica sencilla. Son herramientas propias de un paradigma de programacin llamado imperativo, donde los programas son secuencias de frases imperativas. Uno de los fragmentos de cdigo que aparece en este documento es la iteracin por medio de una clusula for y la sentencia print de la definicin en ISetL de la funcin races (ver arriba). En el curso utilizaremos un paradigma ms cercano a la matemtica, llamado funcional, donde los programas son implementaciones de funciones matemticas. ISetL no es un lenguaje funcional, aunque tiene algunas caractersticas de este paradigma. Una de las cosas que hacen que no sea funcional, es que permite escribir funciones que no se corresponden con el concepto de funcin matemtica, por ejemplo, se puede escribir una funcin que contenga cdigo.

Ejemplo:
fac := func(x); tmp:=1; for i in [1..x] do tmp:=tmp * i; $ cada iteracin >> end; >> return tmp; >> end; > fac(6); 720; >> >> >> >

$ comando de iteracin $ la vble. tmp se actualiza en

Observar que para calcular el factorial de un nmero de esta forma, necesitamos

definir y actualizar una variable temporal, que llamamos tmp, y que interviene una variable de iteracin i. Esta es una definicin de la funcin factorial en cdigo ISetL, que difiere mucho de la definicin matemtica usual, que es: fac(x) = 1 = x * fac(x-1) ; si x =0 ; si x >0

En ISetL podemos escribir esta definicin tal cual, sin usar cdigo.
fac := func(x); if x = 0 then return 1; else if x > 0 then return x * fac(x-1); end; >> end; >> end; > fac(6); 720; >> >> >

El uso de cdigo en ISetL resulta til en algunos casos, por ejemplo si queremos imprimir en pantalla tablas, como las tablas de verdad del clculo proposicional:
>> > >> for p, q in [true, false] do writeln p, q, p and q, p or q, p impl q, not p; end;

3. Ventana grfica
Cuando se inicia una sesin con ISetL, se abre una ventana de ejecucin y una ventana grfica. Para obtener la representacin grfica de una funcin, usar el comando plot, cuya sintaxis es: plot(f); plot(f,a,b); plot(f,a,b,c,d); El comando plot(f); produce la grfica de la funcin f en el dominio (por defecto) [-10,10] y con la escala vertical elegida automticamente. El comando plot(f,a,b); usa [a,b] como escala horizontal y el comando plot(f,a,b,c,d); usa [a,b] como escala horizontal y [c,d] como escala vertical. Ejemplo:
> >> >> >> >> >> >> > cuad := func(x); if is_number(x) then if x < 100 then return x*x; end; end; end; plot(cuad);

Produce:

Para incluir texto en el grfico, poner el cursor en el lugar deseado, apretar CtrlEnter, escribir el texto y apretar Ctrl-Enter otra vez. Se puede imprimir un grfico como cualquier otro archivo. Para abandonar la ventana grfica y pasar a la de ejecucin, usar la tecla q. Para volver a la ventana grfica apretar Ctrl-g. Para usar el procedimiento Cayley, se escribe en la ventana de ejecucin:
> > !include Cayley Cayley(R);

Aparece en la ventana grfica la representacin de la relacin binaria R, con la carencia de que los bucles NO aparecen. Tambin resulta una carencia que los vrtices del grafo debe colocarlos el usuario como texto. Si la relacin es medianamente grande, no resulta cmodo.

4. Glosario
clusula. Usada como sinnimo de comando. comentarios. Frases cuyo nico uso es la mejor comprensin para el usuario humano. Los comentarios no son nunca analizados ni ejecutados por ISetL. frase. Instrucciones o requerimientos realizados a ISetL y que son comprendidos como una nica solicitud por el sistema. sesin. Perodo durante el cual el sistema est ejecutndose. Tambin son las acciones que tienen lugar durante dicho perodo.

5. Referencias:
Introduction to Discrete Mathematics with ISETL , Ed William Fenton, SpringerVerlag, 1996. ISBN 0-387-94782-5 Dubinsky,

6. Apndice A

Limitaciones de ISetL Como se ha mencionado antes, ISetL tiene algunas carencias. Las mismas derivan principalmente del hecho de que no es un lenguaje tipado, es decir, un lenguaje en el cual a cada expresin sintcticamente vlida del lenguaje se le asigna un tipo (entero, booleano, funcin, etc) y para cada tipo se definen operaciones vlidas. ISetL no es tipado, por ejemplo se puede definir

> >> >>

doble:=func(x); return 2 * x; end;

donde x puede ser cualquier objeto para el cual la operacin 2 * este definida. As tenemos que > doble(2); 4: > "aa"; doble ("a");

O sea que lo que se esta definiendo en realidad es una familia de funciones, ya que no se tiene en cuenta que una funcin matemtica es una terna formada por un conjunto dominio, un conjunto co-dominio y una regla de transformacin. Para especificar el dominio utilizamos las clusulas if como se indic anteriormente y de esta forma vemos que si x no es un numero la funcin para ese argumento esta indefinida, lo cual coincide con el concepto matemtico. El smbolo * se usa para operaciones distintas. Se dice que esta sobrecargado. Otro ejemplo de smbolo sobrecargado es el +, que se usa para la suma de nmeros, la concatenacin de strings y la unin de conjuntos. Estas limitaciones derivan en realidad del hecho de que ISetL ha sido diseado para trabajar con matemtica tradicional donde se trabaja principalmente con el conjunto de los nmeros reales. As, la ventana grfica est hecha para representar funciones sobre los nmeros reales y no tiene utilidad para un curso de matemtica discreta.

7. Apndice B Situaciones de sintaxis incorrecta Se recomienda usar archivos e incluirlos en la sesin con el intrprete y si hay errores, corregirlos en el archivo y volver a incluirlo. De esta forma, los mensajes de Isetl y otras lneas innecesarias, no sern guardados. Si ud, realiza los cambios directamente en la sesin con el intrprete, trate de observar lo que recomendamos a travs del siguiente ejemplo: Supongamos que ud. incluye un archivo llamado pepe.txt y le aparecen errores: > !include pepe.txt > 5/7; 0.714; > 2*3

>> ; 6; > forall n in [1..10] ! n mod 2 = 0; Unknown compiler directive "! n" ignored >> ; !Syntax error - clearing input from: forall n in [1..10] ! n mod 2 = 0; ; !clear !clear complete > Lo que recomendamos es reconocer los errores, corregirlos en el archivo y volver a incluirlo. Si ud. quiere corregir en la misma sesin, es decir, sin ir al archivo, el procedimiento es: corregir la expresin, luego pintarla y cliquear la opcin Run de la barra superior de Isetl.
Los mensajes de error

El primer mensaje de error indica un error en la sintaxis de la expresin: en vez del va un | .


El segundo mensaje de error se debe a que la lnea es vaca. La directiva clear borra el error anterior y deja el programa esperando una nueva interaccin, es decir el cursor queda en el lugar del en el ejemplo.

Si el programa se tranca por algn motivo (lo cual no es raro que ocurra), se pueden hacer dos cosas: 1) usar la directiva clear o 2) pintar la ltima expresin correcta y ejecutar Run. Es comn que el programa se tranque porque ud. ha continuado trabajando en una situacin incorrecta, o sea en la cual por ejemplo, no le apareca el > o en la cual el cursor estaba inmediatamente despus de > y no a unos espacios como debe ser. Una vez corregido el error, si Ud. quiere guardar su trabajo, debe primero eliminar lo que ya no es til. En este caso concreto, lo que guardamos es:
> 5/7;

0.714; > 2*3 >> ; 6; > forall n in [1..10] | n mod 2 = 0; false; > O sea, borramos todo lo que era incorrecto y los mensajes de error. Tambin es til borrar lo superfluo para trabajar mas cmodamente en la misma sesin, es decir, aunque no guardemos el trabajo. Los archivos Se recomienda crear archivos de texto y no usar tildes ni ees y crear los archivos en el mismo directorio en el que se corre el programa. Supongamos que creamos un archivo de texto y lo nombramos raices. El sistema operativo lo guardar con la extensin

.txt. En este archivo definimos una funcin como sigue: raices:=func(a,b,c); if is_num(a) and is_num(b) and is_num(c) then delta:=b**2-4*a*c; if delta < 0 then print no existen raices reales; else if delta = 0 then return b/2*a; else return [(b + sqrt(delta))/2*a, (-b - sqrt(delta))/2*a]; end; end; end; end; En la ventana de ejecucin de Isetl escribimos la primera y la tercera de las lneas siguientes y obtenemos como respuestas la segunda y la cuarta y la quinta. > !include raices.txt !include raices.txt completed > raices(1,1,1); "no existen raices reales"; OM; > Resumiendo: en el archivo raices.txt, hemos implementado una definicin de la funcin raices. En la ventana de ejecucin hemos incluido el archivo, (con la directiva include), con lo cual la definicin de la funcin ha quedado accesible. Luego, le hemos pedido al intrprete (al programa), que evale la expresin raices (1,1,1), para lo cual el, computador usa la definicin que le hemos dado como regla de transformacin de esa expresin, es decir como algoritmo para realizar el clculo.

You might also like