Ajuda em prolog

Olá,
Preciso fazer um trabalho em Prolog que faça algumas perguntas e baseado nelas da uma resposta e precisa usar listas. Gostaria de fazer um especie de classificador das divisoes do heavy metal.
O programa farias as perguntas:
1-Qual o tipo de voz?
2-Qual a velocidade do ritimo?
3-O que descreve as letras?

As resposta dessas perguntas poderiam ser:
1-lirico,gutural,rasgado,limpo,agudo
2-lenta, media, rapida
3-morte,dor,satanismo,varios,deus,medieval,sociedade

E a classificacao seria a seguinte:
'melodico' se as respostas forem respectivamente: agudo,medio,varios
'trash' se limpo,rapido,sociedade
'black_s' se rasgado,rapido,satanismo
black_c se rasgado,rapido,deus
death se gutural,rapido,morte
viking se limpo,medio,viking
power se agudo,medio,medieval
sinfonico se lirico,medio,varios
doom se limpo,lento,dor

Eu procurei alguns exemplos na internet... O mais proximo que encontrei está aqui em baixo mas nao entendi:
":- dynamic(resp/2)" , "assert(resp(A,Resp))," , e como ele chega na resposta...


Código:
:- dynamic(resp/2).
caracteristica(animal,mamifero,[tem_pelo]).
caracteristica(animal,mamifero,[da_leite]).
caracteristica(animal,ave,[tem_penas]).
caracteristica(animal,ave,[voa,bota_ovos]).
caracteristica(mamifero,carnivoro,[come_carne]).
caracteristica(mamifero,carnivoro,[tem_dentes_pontudos,tem_garras,tem_olhos_frontais]).
caracteristica(mamifero,ungulado,[tem_casco]).
caracteristica(mamifero,ungulado,[rumina,tem_dedos_pares]).
caracteristica(carnivoro,leopardo,[tem_cor_amarelo_tostado,tem_manchas_escuras]).
caracteristica(carnivoro,tigre,[tem_cor_amarelo_tostado,tem_listras_pretas]).
caracteristica(ungulado,girafa,[tem_pernas_longas,tem_pescoco_comprido,
tem_cor_amarelo_tostado,tem_manchas_escuras]).
caracteristica(ungulado,zebra,[tem_cor_branca,tem_listras_pretas]).
caracteristica(ave,avestruz,[tem_pernas_longas,tem_pescoco_comprido,tem_cor_preta_branca]).
caracteristica(ave,pinguim,[nao_voa,nada,tem_cor_preta_branca]).
caracteristica(ave,albatroz,[e_um_bom_voador]).
 
/* Programa que manipula o conhecimento acima definido. */
go:- nl, 
write('Responda (sim ou nao)... '),
nl, nl,
encontra(X),
nl,
limpa_base,
!.
encontra(Classe):-
caracteristica(Classe,Subclasse,Lista),
verifica_lista(Lista),
encontra(Subclasse).
encontra(leopardo):- write('O animal eh um leopardo').
encontra(tigre):- write('O animal eh um tigre').
encontra(girafa):- write('O animal eh uma girafa ').
encontra(zebra):- write('O animal eh uma zebra ').
encontra(avestruz):- write('O animal eh um avestruz').
encontra(pinguim):- write('O animal eh um pinguim').
encontra(albatroz):- write('O animal eh um albatroz').
encontra(_):-
nl,
write('Nao conheco esse animal'),
nl.
verifica_lista([]).
verifica_lista([X|Cauda]):-
pergunte(X),
verifica_lista(Cauda).
pergunte(A):-
resp(A,sim).
pergunte(A):-
resp(A,nao),fail.
pergunte(A):-
not(resp(A,_)),
write('O animal '),
write(A),
write('?'),
read(Resp),
nl,
assert(resp(A,Resp)),
Resp = sim.
limpa_base:- retract(resp(_,_)), fail.
limpa_base.



Desde já agradeço
 
Última edição pelo moderador:
Só mais uma coisa: de preferencia queria jogar as resposta eu uma lista e depois comparar com a lista q define um estilo tipo:
carac(melodico,[agudo,medio,varios]).

nesse caso eu teria q retornar 'melodico'
mas nao sei fazer isso
:005:
 
Obrigado Baderous.... Agora entendi... Foi de grande ajuda sua resposta...
Abraços de um irmão brasileiro

;)
 
Última edição pelo moderador:
Back
Topo