fork download
  1. persona(mujer, maria).
  2. persona(mujer, sofia).
  3. persona(varon, jaime).
  4. persona(varon, juan).
  5.  
  6. %articulo(vestido).
  7. %articulo(sombrero).
  8. %articulo(zapatos).
  9.  
  10. costo(sombrero,200).
  11. costo(zapato,200).
  12. costo(vestido,100).
  13.  
  14. %stockSombrero([mujer,varon],[2,1]). %2 sobreros de mujer y 1 de varon.
  15. :- dynamic(stockVestido/2).
  16. stockVestido([xs, m, l, xl],[3,30,10,5]).
  17. %tallas de vestidos con las respectivas cantidades en la tienda
  18.  
  19. stockZapato(varon, [40, 41, 42],[20,0,10]).
  20. %tallas de zapatos con las respectivas cantidades en la tienda
  21.  
  22. stockZapato(mujer, [36, 37, 38],[5,2,14]).
  23. %tallas de zapatos con las respectivas cantidades en la tienda
  24.  
  25. %gusta(jaime,zapatos).
  26. %gusta(maria,vestido).
  27. %gusta(maria,sombrero).
  28. %
  29. interesa(jaime, zapatos).
  30. interesa(jaime, sombrero).
  31. interesa(X,Y):- (persona(mujer,X),costo(Y,Z),Z<200).
  32.  
  33. talla(xs).
  34. talla(l).
  35. talla(m).
  36. talla(xl).
  37.  
  38. imprimirStock :- stockVestido(_, [Xs,M,L,Xl]),write("talla xs hay : "),
  39. write(Xs),write(", talla m hay : "),write(M),write(", talla l hay : "),
  40. write(L),write(", talla xl hay "),write(Xl),nl.
  41.  
  42. sumarLista([],0).
  43. sumarLista([X|XS], R):- sumarLista(XS,Z), R is X+Z.
  44.  
  45. contarStockZapatos(R):- stockZapato(varon,_,L1), stockZapato(mujer,_,L2),
  46. sumarLista(L1, R1), sumarLista(L2,R2), R is R1+R2.
  47.  
  48. dec(A,B):- B is (A-1). %??? por que incrementa uno?
  49. descontarVestido(T):- T = xs ,stockVestido(_,[A,B,C,D]) ,A>0,write("para la prueba : "),write(A),retract(stockVestido(_,_)),dec(A, R),asserta(stockVestido([xs,m,l,xl],[R,B,C,D]));
  50. T = m ,stockVestido(_,[A,B,C,D]) ,B>0,retract(stockVestido(_,_)),dec(B, R),asserta(stockVestido([xs,m,l,xl],[A,R,C,D]));
  51. T = l ,stockVestido(_,[A,B,C,D]) ,C>0,retract(stockVestido(_,_)),dec(C, R),asserta(stockVestido([xs,m,l,xl],[A,B,R,D]));
  52. T = xl ,stockVestido(_,[A,B,C,D]) ,D>0,retract(stockVestido(_,_)),dec(D, R),asserta(stockVestido([xs,m,l,xl],[A,B,C,R]));
  53. writeln("No quedan mas stocks de esa talla, no se realizó la compra"),menu.
  54.  
  55. descontar(Valor, Porcentaje, R):- R is (Valor*Porcentaje)/100.
  56.  
  57. verificarSiSeDescuenta(P,T):- persona(varon,P), T = xs.
  58. % Persona, Articulo, Talla
  59. comprarVestido(P,T):- costo(vestido,X), verificarSiSeDescuenta(P,T) -> descontar(X,20,R),descontarVestido(T),write("Se a comprado el vestido con exito con un descuento del 20%, Costo : "), writeln(R), menu;writeln("Se a comprado el vestido con exito"), descontarVestido(T), menu.
  60.  
  61. switch(1):- nl,imprimirStock, menu.
  62. switch(2):- contarStockZapatos(R), write("en la tienda hay :"),
  63. write(R),write(" Zapatos tanto de hombres como de mujeres"),nl, menu().
  64. switch(3):- writeln("1.- jaime le interesa sombrero costo 200"),
  65. writeln("2.- jaime le intersa vestido costo 100"),
  66. writeln("3.- sofia le intersa sombrero costo = 200"),
  67. writeln("4.- sofia le intersa vestido costo = 100"),read(Y),opcion2(Y).
  68.  
  69. switch(4):- writeln("quien compra vestido, escribe el nombre"),
  70. writeln("jaime"),
  71. writeln("maria"),
  72. writeln("sofia"),
  73. writeln("juan"),read(P),persona(_,P),write("nombre : "),
  74. write(P) ,nl,seleccionarTalla(P);writeln("error, escriba una persona existente"),
  75. switch(4).
  76.  
  77. switch(_):- writeln("fin del programa").
  78.  
  79. seleccionarTalla(P):-writeln("Elige Talla : escribe la talla"),
  80. writeln("xs"),
  81. writeln("m"),
  82. writeln("l"),
  83. writeln("xl"), read(T),talla(T),write("Talla : "),
  84. write(T), nl, comprarVestido(P,T);
  85. writeln("error, talla no existente, vuelva a escribir una talla valida"),
  86. seleccionarTalla(P).
  87.  
  88. opcion2(X):- (X == 1,(interesa(jaime, sombrero)-> writeln("si"); writeln("no")),menu);
  89. (X == 2,(interesa(jaime, vestido)-> writeln("si"); writeln("no")), menu);
  90. (X == 3,(interesa(sofia, sombrero)->writeln("Si"); writeln("no")), menu);
  91. (X == 4,(interesa(sofia, vestido)->writeln("Si"); writeln("no")), menu);
  92. writeln("error, elija una opcion valida"),switch(3).
  93.  
  94. menu :- writeln("Seleccione uno de los siguientes datospara salir escriba 5 u otro numero o letra"),
  95. writeln("1.- ver Stock de vestidos"),
  96. writeln("2.- Contar stock Zapato"),
  97. writeln("3.- A persona le interesa..."),
  98. writeln("4.- Comprar Vestido"),read(X),switch(X).
  99.  
  100. menu.
Success #stdin #stdout #stderr 0.02s 7024KB
stdin
1
stdout
Standard output is empty
stderr
ERROR: '$runtoplevel'/0: Undefined procedure: program/0
   Exception: (3) program ? EOF: exit