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

prolog newbie

Discussão em 'Programação' iniciada por Mitch, 1 de Outubro de 2003. (Respostas: 9; Visualizações: 1304)

  1. Mitch

    Mitch Banido

    oias...
    tou aqui a tentar fazer um exercicio de prolog, mas como sou um absoluto novato nesta coisa estou um pouco às "aranhas"...

    aqui fica a base de conhecimentos:


    filho(jose,francisco).
    filho(ana,francisco).
    filho(madalena,francisco).
    filho(francisco,domingos).
    filho(rui,abilio).
    filho(antonio,abilio).
    filho(abilio,domingos).
    filho(augusto,manuel).


    tenho varias funçoes para fazer, nomeadamente as seguintes que sao da minha autoria:

    pai_filho(X,Y) :- filho(Y,X).
    tio_sobrinho(T,S) :- filho(S,I), filho(I,A), filho(T,A), T\==I.
    primo_primo(A,B) :- filho(A,P), filho(P,Avo), filho(T,Avo), filho(B,T), T\==P.
    avo_neto(A,N) :- filho(N,P), filho(P,A).


    falta agora uma funçao que me indique os descendentes de uma determinada pessoa... como o faço?
    obrigado

    PS: algum reparo às outras funçoes é bem-vindo, já que aquilo foi feito sem grandes certezas (embora me pareçam estar correctas).
     
  2. Biker_

    Biker_ Power Member

    Que queres dizer exactamente com descendentes?
    DAndo o nome de um pai queres saber quais os seus filhos (descendentes)?!
    Não deve ser isso, pq isso já tens (pai_filho(X,Y) :- filho(Y,X).
    )...
    Explica melhor para ver se te consigo ajudar.
     
  3. Mitch

    Mitch Banido

    quero saber todos os descendentes de uma pessoa. filhos, netos, bisnetos, etc. e a funçao só pode ser iniciada com uma variavel - descendentes/1
     
  4. Biker_

    Biker_ Power Member

    Ok, já percebi!
    Vou ver se consigo qq coisa e dp digo. :D
    É que já estou um pouco destreinado, mas acho que ainda dá para isto...
     
  5. Biker_

    Biker_ Power Member

    Já agora, visto a a aridade do "descendentes" ser 1, como queres o output?
    Logo directamente para o ecrã, visto não teres variáveis, né?
     
  6. chight

    chight Power Member

    ...epah isso eh para PNP ?
     
  7. Biker_

    Biker_ Power Member

    HEHE!!
    FCUL rula!! :D
     
  8. chight

    chight Power Member

    lol epah se a Antónia Lopes te apanha aki tas lixado...Então um X descendente de Y ou é um filho de Y ou neto de Y.

    defines o facto neto:

    neto(X,Y) :- filho(W,Y),filho(X,W).

    e depois:

    descendente(X,Y) :- filho(X,Y).
    descendente(X,Y) :- neto(X,W).

    axo k é isso... assim de repente é o que me surge.... nao metendo recursividade.. q te vai dar um neto de um neto teu por exemplo, mas agora n me apetece pensar mt....lol
     
  9. Biker_

    Biker_ Power Member

    LOL!!
    A mulher é um show... LOL
    Felizmente já fiz a cadeira, mas até era engraçado... este ano chama-se PP e não PNP.
    Quanto ao Mitch, ele não deve ser de lá, não digo isto por ele ser de Braga, mas pq este ano já não estão a dar Prolog.
    Este ano dão algo que a mim me parece mais complicado, Haskell. Além disso agora já não é a Antónia Lopes, é o Vasco Vasconcelos, um prof que costumava dar PI.
    Quanto a esse código, não é bem o que ele queria. Ele queria funções com aridade 1 não 2, mas sinceramente tb não me estou a lembrar como fazer isso de maneira a que dê todas as hipóteses e não apenas as primeiras...
    Nunca curti mto prolog, mto menos Caml!! :p
    Prolog só me esforcei mm a sério para fazer a cadeira de Inteligência Artificial, fora isso... :P
     
  10. Mitch

    Mitch Banido

    haskell já eu dei :P

    estou em Eng Sistemas e Informatica (LESI), na univ. minho. no primeiro ano temos duas cadeiras de programaçao (haskell e C), agora no segundo estamos a começar o Prolog e ainda vai haver outra diferente no proximo semestre. há mais cadeiras baseadas em diversos tipos de linguagem (metodos de programaçao I é com haskell, por exemplo).

    haskell é um nojo, mas tem de ser :die:
     

Partilhar esta Página