Está en la página 1de 3

Un ejemplo de especificaciones en lgica de predicados

Dada una lista L de N caracteres, escriba un predicado llamado todasVocales para especificar una funcin
que determina si todos los caracteres de L son vocales.
Solucin:
Para comenzar, debemos definir un conjunto que contenga todas las vocales del alfabeto. Llamaremos a
este conjunto Vocales:
Vocales !a, e, i, o, u, ", #, $, %, U&
"'ora, definimos el predicado todasVocales de la siguiente manera:
todasVocales(i(i): L[i ]Vocales)
#sta ser*a la manera natural de definir el predicado, pero ntese que e+isten otras formas de escribirlos
que son equivalentes:
(. todasVocales(i(i):L[i ]Vocales) , v,ase el a+ioma -.(. de la tabla de teoremas.
/. todasVocales(i(i): L[ i ]Vocales)false , es posible por la asociatividad de la
equivalencia 0 teorema 1.(2 de la tabla de teoremas.
1. todasVocales(i(i): L[i ]Vocales) , v,ase el teorema 1.(2 de la tabla de teoremas.
3. todasVocales(i(i): L[ i ]Vocales) , v,ase los teoremas 1.- 0 1.(4 de la tabla de
teoremas.
2. Pueden 'aber m5s...
Cmo se ve esto en programacin?
)tese que el predicado todasVocales es realmente una funcin que recibe una lista 6que podr*a ser un
arreglo7 de tama8o ) 0 devuelve un valor booleano: devuelve true si todos los caracteres de L son vocales
0 false si al menos un caracter de L no es vocal.
La funcin en Pascal podr*a ser algo como:
t0pe Letras set of c'ar9
const Vocales : Letras :;";,;#;,;$;,;%;,;U;,;a;,;e;,;i;,;o;,;u;<9

function todasVocales 6) : integer9 var L : "rreglo7 : boolean9
var i : integer9
begin
i : (9
='ile 66i > )7 and 6L:i< in Vocales77 do
i : i ? (9
todasVocales : i @ )9
end9
"'ora, especifiquemos una funcin que devuelva el nAmero de vocales presentes en L. Para ello
utilizaremos la variable cuantaVocales:
cuentaVocales=(Bi(i): L[ i ]Vocales)
Cue tambi,n puede escribirse como: cuentaVocales=(

i(i)L[i ]Vocales : () .
Du0a funcin en Pascal es:
function cuentaVocales 6) : integer9 var L : "rreglo7 : integer9
var i, c : integer9
begin
c : 49
for i : ( to ) do
if 6L:i< in Vocales7 t'en
c : c ? (9
cuentaVocales : c9
end9
#n los ane+os a este documento podr5 encontrar una versin completa del programa en Pascal,
identificado como ConjuntoVocales.
Einalmente, veremos cmo su utilizan las tripletas de Foare para especificar un Programa.
Domo pudo 'aber investigado, las tripletas de Foare son utilizadas para especificar formalmente las
condiciones de entrada 6precondicin7 0 condiciones de salida 6postcondicin7 de un programa. #n
nuestro caso, de cada uno de los subprogramas 6procedimientos, funciones o m,todos7 que propongamos
para resolver una tarea particular.
La siguiente es la tripleta de Foare para el subprograma 6funcin7 todasVocales:
!)4&todasVocales! tv(i(i):L[ i ]Vocales)&
La siguiente es la tripleta de Foare para el subprograma 6funcin7 cuentaVocales:
!)4&cuentaVocales !cv=(Bi(i): L[ i ]Vocales)&
)tese del uso de las variables de salida tv 0 cv que, en una implementacin 6en cualquier lenguaje7
pueden ser utilizadas como variables de retorno de la funcin.
"ne+os...
program DonjuntoVocales9
t0pe Letras set of c'ar9
const Vocales : Letras :;";,;#;,;$;,;%;,;U;,;a;,;e;,;i;,;o;,;u;<9

const tam (49
t0pe "rreglo arra0:(..tam< of c'ar9

var
" : "rreglo9
r : boolean9
G, c : integer9
function todasVocales 6) : integer9 var L : "rreglo7 : boolean9
var i : integer9
begin
i : (9
='ile 66i > )7 and 6L:i< in Vocales77 do
i : i ? (9
todasVocales : i @ )9
end9
function cuentaVocales 6) : integer9 var L : "rreglo7 : integer9
var i, c : integer9
begin
c : 49
for i : ( to ) do
if 6L:i< in Vocales7 t'en
c : c ? (9
cuentaVocales : c9
end9
begin
for G : ( to tam do
begin
=rite6;$nserte el caracter ;, G, ; de ;, tam, ; de la lista L: ;79
readln6":G<79
end9
r : todasVocales6tam, "79
=riteln6r79
c : cuentaVocales6tam, "79
=rite6;Don ;, c, ; vocales de ;, tam, ; posibles;79
readln9
end.
Prof. Diego Hosquera

También podría gustarte