Documentos de Académico
Documentos de Profesional
Documentos de Cultura
GEEN
NCCIIA
AE NR
EN REED
DEES
SD EC
DE CO
OMMU
UNNIIC
CAAC
CIIO
ONNE
ESS
SISTEMA EXPERTO
DE
RECONOCIMIENTO DE SETAS
EN PROLOG
H
Hééccttoorr PPéérreezz M
Maarrttíínn
LLaauurraa A
Asseennjjoo MMaannzzaannoo
SISTEMA EXPERTO DE RECONOCIMIENTO DE SETAS
ÍNDICE
ÍNDICE __________________________________________________________ 2
INTRODUCCIÓN______________________________________________________ 3
SISTEMA EXPERTO___________________________________________________ 3
BÚSQUEDA Y METODOS ______________________________________________ 4
ENTRENAMIENTO DEL SISTEMA______________________________________ 5
RESULTADOS ________________________________________________________ 7
Archivo preguntas.dat_________________________________________________________ 7
Archivo DBHechos.dat________________________________________________________ 8
Archivo DBReglas.dat ________________________________________________________ 8
MEJORAS PROPUESTAS ______________________________________________ 9
DISCUSION Y CONCLUSIÓN__________________________________________ 10
BIBLIOGRAFÍA ______________________________________________________ 12
CÓDIGO COMENTADO ______________________________________________ 13
2
INTRODUCCIÓN
Este sistema experto tiene como base fundamental el conocimiento del experto y por tanto
tiene como una característica principal el autoaprendizaje y la recursividad, por lo que es
recomendable que la base de datos de conocimiento que se genere debe ser debidamente analizada
antes de su implantación.
SISTEMA EXPERTO
3
BÚSQUEDA Y METODOS
El sistema se basa en el empleo extensivo de tres bases de datos, archivos de texto plano:
(Pregunta.dat, DBHechos.dat, DBReglas.dat).
Las reglas que presentan las características identificativas de las diferentes setas
reconocidos por el sistema se encuentran contenidas en la base de datos de reglas (DBReglas.dat) en
forma de cadenas con nombre en latín de la correspondiente seta, las preguntas realizadas al usuario
junto con las respuestas correspondientes con fines de filtro y selección.
4
El programa carga todas las características identificativas del archivo de reglas,
convirtiéndolas en hechos usando assert. Así, al inicio de la ejecución, el sistema conoce todas
las propiedades de cada una de las setas.
Cuando el usuario responde a una pregunta del sistema, el sistema hace una búsqueda en
todos los hechos conocidos, buscando las setas que contienen el hecho pregunta-respuesta
introducido. Estas setas son identificadas positivamente; el programa se encarga después de
eliminar las setas identificadas negativamente de la memoria, de forma que se reduce el ámbito de
búsqueda y el uso de memoria.
Si el sistema se queda con al menos una seta identificada positivamente, se continúa
haciendo las siguientes preguntas (eliminando recursivamente el ámbito de búsqueda) para
asegurarse de hacer una identificación correcta, reduciendo la posibilidad de emitir un falso
positivo. Sin embargo se muestra al usuario el nombre de esa seta durante todo el proceso. Al
responder a la última pregunta de la batería, se muestran los datos de la seta que se ha identificado.
Al haber diseñado correctamente las preguntas, sólo se debería haber encontrado una coincidencia
(no puede haber dos setas cuyas preguntas sean totalmente iguales). El programa considera esta seta
como identificada y muestra los datos correspondientes a esa seta de la base de datos de hechos.
Para poder facilitar la identificación por parte del usuario, se ha añadido una carpeta con el
nombre Imágenes, que contendrá las fotos de las diferentes setas que el sistema es capaz de
reconocer inicialmente cuando sólo cuenta con el conocimiento proporcionado por el experto. Para
poder localizar la foto asociada a la seta que ha sido identificada por el sistema, y que por tanto
entre otras cosas contamos con su nombre en latín, hemos nombrado al archivo precisamente con el
nombre en latín de la seta, así “agaricus campestris.jpg” contendrá una imagen del champiñón
silvestre. Esta información extra puede ser utilizada en una posible mejora al añadir un interfaz
gráfico al sistema.
5
PREGUNTA RESPUESTAS POSIBLES
¿Tiene velo? S, N
¿Tiene volva? S, N
¿Tiene pie? S, N
¿Con cutícula? S, N
¿Tipo de láminas? Libres, decurrentes, adnatas
¿Color de las láminas? Blanco, rosa, verde, pardo...
¿Color del sombrero? Pardo, blanco, rojo, verde...
¿Forma del sombrero? Convexo, cónico, globoso, plano, deprimido, umbonado, embudado, n/a
¿Forma del borde? Plano, curvado, convoluto, n/a
¿Pie con anillo? S, N, n/a
¿Pie hueco? S, N, n/a
Una vez diseñadas las preguntas, el experto introdujo un número de setas mediante el
propio sistema de aprendizaje. Las setas elegidas por el experto fueron una combinación de setas
comunes, prestando atención en introducir setas de la misma familia o setas fácilmente
confundibles, para detectar posibles fallos en la elaboración de las preguntas.
Se puede ver un ejemplo de introducción de una nueva seta en las siguientes capturas de
pantalla:
¿Tiene laminas? n
Hay 4 setas encontradas.
Piptoporus Betulinus, Langermannia Gigantea, Boletus Pinicola, Boletus Edulis.
¿Tiene poros? s
Hay 3 setas encontradas.
Piptoporus Betulinus, Boletus Pinicola, Boletus Edulis.
¿Tiene sombrero? s
Hay 3 setas encontradas.
Piptoporus Betulinus, Boletus Pinicola, Boletus Edulis.
¿Tiene velo? n
Hay 3 setas encontradas.
Piptoporus Betulinus, Boletus Pinicola, Boletus Edulis.
¿Tiene volva? n
Hay 3 setas encontradas.
Piptoporus Betulinus, Boletus Pinicola, Boletus Edulis.
¿Tiene pie? s
Hay 2 setas encontradas.
Boletus Pinicola, Boletus Edulis.
El experto está introduciendo los datos correspondientes al Boletus Satanás, seta venenosa
que se podría confundir con otros boletus. Como se ve en el último paso, se ha restringido el
dominio de búsqueda a las setas de esta familia.
6
Cuando se pregunta el color de las láminas (o de los poros, en este caso), el experto
introduce la característica que diferencia este boleto de los otros, el sistema lo detecta, y nos
informa de que va a pasar al modo de aprendizaje. En este modo se preguntan las características
restantes de la seta directamente.
Una vez que el experto ha satisfecho las preguntas del programa, este le pide identificar
manualmente la seta, dando sus datos específicos;
RESULTADOS
Archivo preguntas.dat
En este archivo quedaron registradas las preguntas que el experto consideró necesarias para
la clasificación y su orden. Son la piedra angular del sistema, y podrían ser ampliadas si se detecta
que no permiten la identificación unívoca de alguna seta. Estas preguntas son las que tiene que
responder el usuario cuando quiera clasificar la seta. Hay que hacer hincapié en que estas preguntas
sólo se pueden cambiar a mano, el programa no añadirá preguntas si detecta dos setas con idénticas
características (en su lugar dará un falso positivo).
Los contenidos del archivo son:
Tiene laminas
Tiene poros
Tiene sombrero
Tiene velo
Tiene volva
Tiene pie
Con cuticula
Tipo de laminas
Color de las laminas
Color del sombrero
Forma del sombrero
Forma del borde
Pie con anillo
Pie hueco
7
Archivo DBHechos.dat
Este archivo es el resultado de la clasificación de cada seta, y es el que el programa usa para
después mostrar la información sobre cada seta. La información para cada seta se guarda en forma
de triplas (Nombre latín, Nombres comunes, Comestibilidad). Los contenidos alcanzados son:
Archivo DBReglas.dat
Este archivo es el resultado de la tipificación de cada seta introducida, y guarda las
características de cada seta de forma que luego el programa pueda usar esos conocimientos
adquiridos. El formato que sigue este fichero será:
Línea 1 Nombre en latín de la seta
Línea 2…k Pregunta1~Respuesta1, Pregunta2~Respuesta2,…, PreguntaN~RespuestaN
Línea k+1 Nombre en latín de la seta
…..
Los contenidos de este fichero se listan a continuación:
Macrolepiota Procera
Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~S,Tiene pie~S,Con
cuticula~S,Tipo de laminas~LIBRES,Color de las laminas~BLANCO,Color del sombrero~PARDO,Forma
del sombrero~GLOBOSO,Forma del borde~CURVADO,Pie con anillo~S,Pie hueco~S,
Cortinarius Odorifer
Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con
cuticula~N,Tipo de laminas~ADNATAS,Color de las laminas~AMARILLO,Color del
sombrero~MARR¢N,Forma del sombrero~CONVEXO,Forma del borde~CURVADO,Pie con anillo~N,Pie
hueco~N,
Russula Cyanoxantha
Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con
cuticula~N,Tipo de laminas~ADNATAS,Color de las laminas~BLANCO,Color del
sombrero~VIOLETA,Forma del sombrero~CONVEXO,Forma del borde~CURVADO,Pie con anillo~N,Pie
hueco~N,
Lactarius Torminosus
Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con
cuticula~S,Tipo de laminas~DECURRENTES,Color de las laminas~CARNE,Color del
sombrero~OCRE,Forma del sombrero~EMBUDADO,Forma del borde~CONVOLUTO,Pie con anillo~N,Pie
hueco~S,
Lactarius Deliciosus
Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con
cuticula~S,Tipo de laminas~DECURRENTES,Color de las laminas~NARANJA,Color del
sombrero~NARANJA,Forma del sombrero~DEPRIMIDO,Forma del borde~CONVOLUTO,Pie con anillo~N,Pie
hueco~S,
Piptoporus Betulinus
Tiene laminas~N,Tiene poros~S,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~N,Con
cuticula~S,Tipo de laminas~N/A,Color de las laminas~BLANCO,Color del sombrero~GRIS,Forma del
sombrero~SEMICIRCULAR,Forma del borde~CURVADO,Pie con anillo~N/A,Pie hueco~N/A,
8
Langermannia Gigantea
Tiene laminas~N,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~N,Con
cuticula~S,Tipo de laminas~N/A,Color de las laminas~ROSADO,Color del sombrero~BLANCO,Forma
del sombrero~GLOBOSO,Forma del borde~N/A,Pie con anillo~N/A,Pie hueco~N/A,
Pleurotus Eryngii
Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con
cuticula~S,Tipo de laminas~DECURRENTES,Color de las laminas~OCRE,Color del
sombrero~MARR¢N,Forma del sombrero~APLANADO,Forma del borde~PLANO,Pie con anillo~N,Pie
hueco~N,
Pleurotus Eryngii var. Nebrodensis
Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con
cuticula~N,Tipo de laminas~DECURRENTES,Color de las laminas~BLANCO,Color del
sombrero~BLANCO,Forma del sombrero~EMBUDADO,Forma del borde~CONVOLUTO,Pie con anillo~N,Pie
hueco~N,
Pleurotus Ostreatus
Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~N,Con
cuticula~N,Tipo de laminas~DECURRENTES,Color de las laminas~BLANCO,Color del
sombrero~GRIS,Forma del sombrero~SEMICIRCULAR,Forma del borde~CONVOLUTO,Pie con
anillo~N/A,Pie hueco~N/A,
Boletus Pinicola
Tiene laminas~N,Tiene poros~S,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con
cuticula~S,Tipo de laminas~N/A,Color de las laminas~AMARILLO,Color del sombrero~ROJO,Forma
del sombrero~CONVEXO,Forma del borde~CURVADO,Pie con anillo~N,Pie hueco~N,
Boletus Edulis
Tiene laminas~N,Tiene poros~S,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con
cuticula~S,Tipo de laminas~N/A,Color de las laminas~AMARILLO,Color del sombrero~PARDO,Forma
del sombrero~CONVEXO,Forma del borde~CURVADO,Pie con anillo~N,Pie hueco~N,
Boletus Satanas
Tiene laminas~N,Tiene poros~S,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con
cuticula~S,Tipo de laminas~N/A,Color de las laminas~NARANJA,Color del sombrero~P LIDO,Forma
del sombrero~CONVEXO,Forma del borde~CURVADO,Pie con anillo~N,Pie hueco~N,
Amanita Caesarea
Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~S,Tiene pie~S,Con
cuticula~S,Tipo de laminas~LIBRES,Color de las laminas~AMARILLO,Color del
sombrero~NARANJA,Forma del sombrero~CONVEXO,Forma del borde~PLANO,Pie con anillo~S,Pie
hueco~N,
Amanita Muscaria
Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~S,Tiene pie~S,Con
cuticula~S,Tipo de laminas~LIBRES,Color de las laminas~BLANCO,Color del sombrero~ROJO,Forma
del sombrero~CONVEXO,Forma del borde~PLANO,Pie con anillo~S,Pie hueco~N,
Amanita Phalloides
Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~S,Tiene pie~S,Con
cuticula~S,Tipo de laminas~LIBRES,Color de las laminas~BLANCO,Color del
sombrero~VERDOSO,Forma del sombrero~APLANADO,Forma del borde~PLANO,Pie con anillo~S,Pie
hueco~N,
Agaricus campester
Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con
cuticula~S,Tipo de laminas~LIBRES,Color de las laminas~ROSA,Color del sombrero~BLANCO,Forma
del sombrero~APLANADO,Forma del borde~CURVADO,Pie con anillo~S,Pie hueco~N,
MEJORAS PROPUESTAS
Pese a haber elaborado un sistema experto totalmente funcional, hemos detectado un buen
número de mejoras en diversos aspectos de nuestro programa. No hemos implementado estas
mejoras debido a la falta de tiempo, pero las comentamos a continuación:
9
Sin embargo, las preguntas de clasificación tampoco se pueden realizar como
árboles, ya que, independientemente de que la seta tenga sombrero o no habrá que
preguntar si tiene pie. Por tanto pensamos que se puede mejorar el sistema de
preguntas lineal que tenemos ahora añadiendo la posibilidad de hacer “desvíos”
dependiendo de la respuesta y después volver a una pregunta en común.
En la implementación actual del sistema, sólo se pueden aprender setas que tienen
algún par pregunta/respuesta distinto a las ya conocidas, lo que implica un diseño
muy cuidadoso de las preguntas por el experto. Sin embargo puede haber dos setas
lo suficientemente parecidas como para que el sistema no las distingan. Una mejora
para esta situación es añadir al programa un modo “edición” de modo que al llegar
a una identificación, el experto pueda decidir que es una identificación errónea y
añadir al sistema una pregunta que permita diferenciar las dos setas.
Finalmente, y gracias a haber usado Visual Prolog para nuestro programa, es
posible hacer una mejora visual, y pasar del sistema de línea de comandos a un
sistema de ventanas. Además se podrían usar las imágenes de las setas incluídas en
la carpeta imágenes para mostrar directamente al usuario la seta que ha clasificado,
o acceder a una base de datos (o un libro) indicando una descripción más detallada
de la seta.
Pensando siempre en facilitar el trabajo al usuario sería conveniente el realizar un
pequeño folleto o manual, con las posibles respuestas a una determinada pregunta.
Así por ejemplo un usuario no sepa exactamente que responder a la pregunta de
“forma del sombrero?”, podría acudir al manual donde tendría todas las posibles
respuestas con la definición o correspondiente dibujo de cada una de ellas (en
nuestro ejemplo: convexo,cónico,globoso,plano,deprimido,embonado,etc), la
respuesta por parte del usuario sería más acertada. Y de esta forma evitaríamos
errores como responder naranja en lugar de anaranjado, siendo lo mismo o
prácticamente (obviamos este debate), darían respuestas totalmente diferentes.
DISCUSION Y CONCLUSIÓN
1. Identificar cualquier tipo de seta en base a características externas que presenta, dando
como resultado el reconocimiento de ésta.
10
Investigación: En estudios de micología, para tipificar en base a la caracterización que
previamente se tiene en la base de datos dinámica del sistema experto, la cual se encuentra
inicialmente alimentada por el experto.
El alcance del sistema depende principalmente del experto que alimenta inicialmente la
base de datos, teniendo como limitante principal el uso posterior que se le pueda dar al sistema
experto por parte de usuarios considerados como expertos y que por una alimentación no eficiente
de la base de datos por estos últimos, la base de datos pueda tener datos inconsistentes .
Lo que podría pasar en la realidad si este programa fuera utilizado con alguno de estos fines
es que en una primera prueba el sistema experto con la base de conocimientos implementada tendría
un buen funcionamiento, por cuanto que permite que un segundo usuario no experto en micología
pueda identificar una seta con las características que este ultimo proporciona al sistema.
Si se realizara una segunda prueba con el sistema experto, para la cuál se utilizara un
usuario experto en micología, el cual podía realizar tareas de identificación con la base de datos
predefinida en el sistema y también podía retroalimentar al sistema en base a la interacción usuario-
sistema. En principio esto tendría buen resultado por cuanto algunas características no tipificadas
por el primer experto serían hechas por el segundo experto, aumentando así la precisión del sistema.
El problema sería que en cuanto, la tipificación del segundo experto no coincida en una
característica con la tipificación hecha por el primer experto, esta no coincidencia supondría que
posteriormente el sistema experto entraría en conflicto cuando se tipificaran setas, lo cual no es
realmente cierto por cuanto el sistema experto identificaba a la seta con cualquiera de las
clasificaciones hechas (ya sea con el primer experto o con el segundo experto), pero no es
consistente de que una seta este descrita de diferentes formas.
Como una última anotación para este sistema experto, decir que hemos elegido tipificar o
catalogar setas, pero bastaría con modificar los ficheros correspondientes a las bases de datos
(pregunta.dat, DBHechos.dta y DBReglas.dat) para poder tipificar cualquier otro objeto, ser vivo, o
lo que se nos ocurra, pero no habrá que modificar en ningún momento el código fuente,
simplemente volver a realizar el proceso de entrenamiento del sistema gracias a un experto en el
tema.
11
BIBLIOGRAFÍA
12
CÓDIGO COMENTADO
/*****************************************************************************
/* Domains: En esta sección se define el tipo de objetos con los que trabajaremos.*/
/* Dominios locales. */
domains
Opcion,Longitud,Longitud1,Longitud2,Longitud3,entero,num=integer
Pos,Pos1,Pos2,Pos3,Pos4,Pos5,Pos6,Total,TotalTmp=integer
Salida,Cadena,Cad1,Cad2,Cad3=string
Regla,TotalStr,Resultado1=string
LRegla=Cadena*
ListaSujetos,ListaNegativos=Sujeto*
13
/* Clauses. Contiene la implementación del conjunto de hechos y reglas que componen
el programa.*/
clauses
/* Corresponde al segundo menú del programa, el usuario desea visualizar los archivos
1--> Para visualizar DBHechos.dat.
2--> Para visualizar preguntas.dat.
3--> Para visualizar DBReglas.dat.*/
menu(1,"principal"):-
write("(1)Muestra Clasificacion\n"),
write("(2)Muestra Preguntas\n"),
write("(3)Muestra Reglas\n"),
write("==>"),
readint(Opcion),
nl,
menu(Opcion,"BD").
14
assertz(encontrado("Falso")),
/* Salir de la aplicación.*/
menu(3,"principal"):-
write("Presione una tecla para salir"),
readchar(_).
/* Leemos del fichero DBReglas para cada seta su nombre en latín (sujeto) y sus preguntas
con las respuestas (Cadena).*/
analiza:-
eof(input1),!. /* Llegamos al final del fichero DBReglas.dat.*/
analiza:-
readdevice(input1),
readln(Sujeto),
readln(Cadena),
/* Parseamos las preguntas-respuestas.*/
decodifica(Cadena,Sujeto).
/* Creamos un hecho por cada pregunta-respuesta asociado al sujeto, por tanto deberemos
parsear Cadena, ya que aquí se encuentran concatenadas todas
pregunta1~repuesta1, pregunta2~repuesta2,...*/
decodifica(Cadena,Sujeto):-
/* Cogemos de la posición de la coma y hacemos un substring hasta esa coma
ej:Toma leche~S, */
str_len(Cadena,Longitud),
searchchar(Cadena,',',Pos),
Pos1=Pos-1,
subString(Cadena,1,Pos1,Cadena1),
/* De la subcadena esta tomamos la longitud y creamos una subcadena con lo que hay
delante y detrás de ~ .*/
str_len(Cadena1,Longitud1),
searchchar(Cadena1,'~',Pos2),
Pos3=Pos2-1,
substring(Cadena1,1,Pos3,Pregunta),
Pos4=Pos2+1,
searchchar(Cadena1,'~',Pos6),
Longitud2=Longitud1-Pos6,
substring(Cadena1,Pos4,Longitud2,Respuesta),
/* Una vez que tenemos la pregunta y la respuesta podemos llamar a assetz esta
característica.*/
assertz(propiedad(Sujeto,Pregunta,Respuesta)),
15
Pos5=Pos+1,
Longitud3=Longitud-Pos,
substring(Cadena,Pos5,Longitud3,Cadena2),
16
/* Analiza los sujetos que cumplen una pregunta y una respuesta, eliminando al resto.
Si no hay sujetos que cumplan esa pregunta/respuesta, activa el modo de aprendizaje y
desactiva el modo de análisis.
Por aquí entraremos cuando estemos en el proceso de aprendizaje.*/
analiza_pregunta(_,_,_):-
encontrado(XX),
XX<>"Falso",!.
/* Buscamos los sujetos que no tengan la misma respuesta que dio el usuario para
una pregunta, esos sujetos no serán solución y los podremos eliminar.*/
findall(XX,novalido(XX,Pregunta,Respuesta),ListaNegativos),
borraeliminados(ListaNegativos).
/* Obtiene los sujetos cuya respuesta no coincide con una respuesta dada.*/
novalido(Sujeto,Pregunta,Respuesta):-
propiedad(Sujeto,Pregunta,Z),
Z<>Respuesta.
/* Si solo hay uno, informar de ello, pero obligar al usuario a que siga respondiendo
preguntas para asegurarse (minimizar la posibilidad de falsos positivos).*/
existeBD(1):-
write("Hay una seta encontrada. Siga respondiendo a las preguntas para estar
seguro.\n"),!.
17
/* Grabación de regla en archivo.*/
/* Si el sujeto esta clasificado en DBHechos (encontrado=verdadero) no haremos nada.*/
nuevosujeto:-
encontrado("Verdadero"),!.
/* El usuario introduce los datos del nuevo sujeto para completar el aprendizaje.*/
write("Nombre latino : "),readln(Resultado),
write("Nombre(s) comun(es): "),readln(Propiedad1),
write("Comestibilidad : "),readln(Propiedad2),
18
pantallainicio:-
write("\201\205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\
205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\
205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\187\n"),
write("\186 SISTEMA EXPERTO DE CLASIFICACION DE SETAS \186\n"),
write("\186\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\
196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\
196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\186\n"),
write("\186 Autores: \186\n"),
write("\186 LAURA ASENJO MANZANO \186\n"),
write("\186 H\144CTOR P\144REZ MARTIN \186\n"),
write("\186\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\
196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\
196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\186\n"),
write("\186 Inteligencia en redes de comunicaci\149n \186\n"),
write("\186 Universidad Carlos III de Madrid, a\164o 2003 \186\n"),
write("\186\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\
196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\
196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\196\186\n"),
write("\186Este programa solo tiene fines educativos. Los autores no \186\n"),
write("\186 se hacen responsable de las consecuencias debidas a una \186\n"),
write("\186 clasificación erróneaa. Compruebe siempre los resultados.\186\n"),
write("\200\205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\
205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\
205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\205\188\n"),
barra.
/* Imprime por pantalla una lista de elementos, con una puntuación correcta para separarlos.
*/
escribeLista([]).
escribeLista([H]):-
write(H,".").
escribeLista([H|T]):-
write(H,", "),
escribeLista(T).
/*Repeticion */
repetir.
repetir:-
repetir.
19