1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Ajuda em prolog

Discussão em 'Programação' iniciada por dougmettal, 18 de Agosto de 2008. (Respostas: 3; Visualizações: 892)

  1. 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: 18 de Agosto de 2008
  2. 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:
     
  3. Obrigado Baderous.... Agora entendi... Foi de grande ajuda sua resposta...
    Abraços de um irmão brasileiro

    ;)
     
    Última edição pelo moderador: 19 de Agosto de 2008

Partilhar esta Página