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

Duvida em Prolog

Discussão em 'Programação' iniciada por Fil__, 20 de Abril de 2008. (Respostas: 6; Visualizações: 1647)

  1. Fil__

    Fil__ Power Member

    Malta tenho o seguinte exercicio que nao estou a conseguir perceber como o fazer. Podem ajudar-me?

    Código:
    aluno(vosso_nome, ia).
    aluno(vosso_colega_01__homem, ia).
    aluno(vosso_colega_02_mulher , ia).
    aluno(joaquim, lab2).
    aluno(joaquim, lp2).
    frequenta(vosso_nome, ulht).
    frequenta(maria, ulht).
    frequenta(joel, ist).
    professor(vitor, ia).
    professor(manuel, ia).
    professor(ana_paula, lp2).
    professor(pedro, lab2).
    funcionario(pedro, ist).
    funcionario(ana_paula, ulht).
    funcionario(vitor, ulht).
    funcionario(manuel, ulht).
    Escreva as regras em Prolog, de forma que o Programa responda correctamente às
    seguintes questões:
    2.1. Quem são os alunos do professor X?
    2.2. Quem são as pessoas da universidade X? (alunos ou docentes)
    2.3. Quem é colega de quem? Se aluno: é colega se for colega de disciplina ou colega de
    curso ou colega de universidade. Se professor: se for professor da mesma universidade.
    
    E que sem alterar a base de factos nao tou mesmo a ver como responder a questao 2.1
    Se calhar a soluçao e muito simples e eu é que sou grunho
    Podem ajudar-me?
     
  2. Make.Love

    Make.Love Banido

    Essas questões chamam-se goals e formalizam-se com as chamadas goal clauses. Exemplo:


    Código:
    pai(“Bruno”,”João”).
    pai(“Paulo”,”Bruno”).
    
    avô(Pessoa, Avô) :-
    		pai (Pessoa, Pai), 
    		pai(Pai, Avô).
    
    
    Código:
    pai(“São”,”João”).	 Solução: no solutions
    pai(“Paulo”,X). 	   Solução: X = ”Bruno”
    avô(“Paulo”,”João”).    Solução: true 
    Código:
    pai(“Bruno”,”João”).
    // a leitura poderá ser feita da seguinte forma: O João é Pai de Bruno  ... 
    
    pergunta quem é pai de bruno? pai("Bruno",X) a resposta será X = João
    dei uma dica com um exemplo simples, ve la se consegues agora aplicar no teu.

    boa sorte.
     
    Última edição: 20 de Abril de 2008
  3. Baderous

    Baderous Banido

    Código:
    quemsao(X,A):-professor(X,D),aluno(A,D).
     
  4. Fil__

    Fil__ Power Member

    E que a base de factos tava a moer-me o sistema nervoso. Desculpem la ser um nabo nisto. Thanks pelas dicas e paciencia malta

    Baderous, nao e isso que é pretendido na pergunta 2.1. Pelo menos o que eu entendo da pergunta e que vamos perguntar ao SWI-Prolog quais sao os alunos do professor manuel por exemplo, e o programa dar a lista de nomes de alunos que tem IA que é a disciplina do professor manuel
     
    Última edição: 20 de Abril de 2008
  5. Fil__

    Fil__ Power Member

    Ja consegui pessoal mas agora tou aqui com outra duvida. No seguinte exercicio
    Código:
    GENEALOGIA. Considere a seguinte base de factos:
    
    pai(nome_do_vosso_pai, vosso_nome ).
    avo(nome_do_vosso_avô_paterno, vosso_nome).
    avo(nome_do_vosso_avô_materno, vosso_nome ).
    bisavo(nome_de_um_vosso_bisavô_ou_bisavó, vosso_nome).
    
    Reescreva o Programa (reescrevendo a base de factos ou escrevendo as regras) em
    Prolog, de forma que o Programa responda correctamente à seguinte questão: quem são
    os vossos antepassados?
    
    Consigo responder a questao usando essa base de factos? Como? Podem ajudar novamente? Brigadao malta
     
  6. Baderous

    Baderous Banido

    Tens de usar recursividade.

    Como aí diz que se pode reescrever a base de dados, eu defini apenas um facto pai que estabelece o grau de parentesco entre os diversos elementos. Depois escrevi os predicados eavo e ebisavo para descobrir os avós e bisavós e por fim defini o predicado antep para saber os antepassados:

    Código:
    pai(ze,pedro). %ze é pai do pedro
    pai(ana,pedro). %ana é mãe (grau de parentesco = pai) do pedro
    pai(manuel,ze). %manuel é pai do zé, logo avô do pedro
    pai(carlos,ana). %carlos é pai da ana e avô do pedro
    pai(quim,carlos). %quim é pai do carlos, logo bisavô do pedro
    
    eavo(A,X):-pai(A,P),pai(P,X).
    
    ebisavo(B,X):-eavo(B,P),pai(P,X).
    
    antep(X,Z):-pai(Z,X).
    antep(X,Z):-pai(P,X),antep(P,Z).
     
    Última edição pelo moderador: 22 de Abril de 2008
  7. Make.Love

    Make.Love Banido

    Código:
    pai("Bruno","João").
    pai("Paulo","Bruno").
    
    avô(Pessoa, Avô) :-
    		pai (Pessoa, Pai), 
    		pai(Pai, Avô).
    
    algo assim é mais facil para entender a lógica.
     

Partilhar esta Página