Welcome, Guest
Username: Password: Remember me
  • Page:
  • 1

TOPIC: Ejercicios avanzados de Prolog

Ejercicios avanzados de Prolog 2 months 3 weeks ago #8254

  • kirstein
  • kirstein's Avatar Topic Author
  • Offline
  • Profesor
  • Profesor
  • Posts: 2347
  • Karma: 666
  • Thank you received: 1316
Hola,

Ejercicios de Sort:
  sort(LD,LO):- sortAux(LD,LO,[]).
  
  sortAux([],L,L).
  sortAux([Car|Cdr],L,Aux):- inssort(Car,Aux,AuxC),
                             sortAux(Cdr,L,AuxC).
  
  inssort(E,[],[E]).
  inssort(E,[Car|Cdr],[E|[Car|Cdr]]):- E <= Car,!.
  inssort(E,[Car|Cdr],[Car|S]):- inssort(E,Cdr,S).
  
  
  % queda de tarea moral pensar las permutaciones: sort(X,[1,2,3])

+ También se adjunta la solución a la casa de los fantasmas.
domains
    lista = symbol*
    
predicates

    puerta(symbol,symbol).
    fantasma(symbol).
    camino(symbol,symbol,lista).
    caminoAux(symbol,symbol,lista,lista).
    trozos(lista,lista,lista).  
    mirror(lista,lista).   
    portal(symbol,symbol).
    member(symbol,lista). 



clauses

    puerta(a,b).
    puerta(a,c).
    puerta(c,d).
    puerta(c,e).
    puerta(d,k).
    puerta(e,k).
    puerta(e,f).
    puerta(b,h).
    puerta(b,f).
    puerta(f,i).
    puerta(g,i).
    puerta(h,i).
    puerta(k,i).
    puerta(j,k).
    fantasma(d).
    fantasma(e).
    fantasma(h).
        
        
    portal(A,B):- puerta(A,B).
    portal(A,B):- puerta(B,A).    
        
        
    camino(X,X,[X]).

    camino(X,Y,L):- caminoAux(X,Y,R,[]),
                    mirror(R,L).
    
    caminoAux(X,X,[X|K],K):- !.
    caminoAux(X,Y,K,LAcum):- portal(X,W),
                             not(member(W,LAcum)),
                             not(fantasma(W)),   
                             caminoAux(W,Y,K,[X|LAcum]).
  
  
    member(X,[X|_]):- !.
    member(X,[_|Cdr]):- member(X,Cdr).
  
    trozos([],X,X).
    trozos([Car|Cdr],[Car|RestoC],L):-
            trozos(Cdr,RestoC,L).
    
    
    mirror([],[]).    
    mirror([Car|Cdr],Nemesis):- bound(Car),
                              mirror(Cdr,CdrNem),
                              trozos(CdrNem,Nemesis,[Car]).
    mirror(X,Y):- bound(Y), not(bound(X)), mirror(Y,X).

Saludos,
Kirstein
Attachments:

Please Identificarse to join the conversation.

  • Page:
  • 1
  • Not Allowed: to create new topic.
  • Not Allowed: to reply.
  • Not Allowed: to add attachements.
  • Not Allowed: to edit your message.
Time to create page: 0.117 seconds
Powered by Kunena Forum