Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JuanFdS/3eb2a8428396c24ad4b447b36ec7a543 to your computer and use it in GitHub Desktop.
Save JuanFdS/3eb2a8428396c24ad4b447b36ec7a543 to your computer and use it in GitHub Desktop.
profesiones.pl
trabaja(migue, profesion(maestro, cocina), ollaEssen).
trabaja(carla, profesion(maestro, alquimia), mechero).
trabaja(ludat, profesion(aprendiz, mecanica), llaveInglesa).
trabaja(marilu, profesion(oficial, alquimia), piedraFilosofal).
trabajo(profesion(Exp, Area)):-
trabaja(_, profesion(Exp, _), _),
trabaja(_, profesion(_, Area), _).
% sonCamaradas(UnaPersona, OtraPersona):-
% trabaja(UnaPersona, profesion(_, Area), _),
% trabaja(OtraPersona, profesion(_, Area), _),
% UnaPersona \= OtraPersona.
sonCamaradas(UnaPersona, OtraPersona):-
trabaja(UnaPersona, UnaProfesion, _),
trabaja(OtraPersona, OtraProfesion, _),
mismoArea(UnaProfesion, OtraProfesion),
UnaPersona \= OtraPersona.
% mismoArea con problemas de inversibilidad, porque aparecen incognitas en el encabezado hecho.
mismoArea(profesion(_, Area), profesion(_, Area)).
% mismoArea inversible
% mismoArea(profesion(UnaExp, Area), profesion(OtraExp, Area)):-
% trabajo(profesion(UnaExp, Area)),
% trabajo(profesion(OtraExp, Area)).
puedeEntrenar(Entrenador, Discipulo):-
sonCamaradas(Entrenador, Discipulo),
tieneMayorRango(Entrenador, Discipulo).
tieneMayorRango(UnaPersona, OtraPersona):-
trabaja(UnaPersona, profesion(ExpDeUnaPersona, _), _),
trabaja(OtraPersona, profesion(ExpDeOtraPersona, _), _),
mayorRango(ExpDeUnaPersona, ExpDeOtraPersona).
% mayorRango(UnRango, OtroRango) -- por extensión
% mayorRango(maestro, experto).
% mayorRango(maestro, oficial).
% mayorRango(maestro, aprendiz).
% mayorRango(experto, oficial).
% mayorRango(experto, aprendiz).
% mayorRango(oficial, aprendiz).
% mayorRango(UnRango, OtroRenga) -- por comprensión
masExperiencia(maestro, experto).
masExperiencia(experto, oficial).
masExperiencia(oficial, aprendiz).
mayorRango(RangoMayor, RangoMenor):-
masExperiencia(RangoMayor, RangoMenor).
mayorRango(RangoMayor, RangoMenor):-
masExperiencia(RangoMayor, RangoIntermedio),
mayorRango(RangoIntermedio, RangoMenor).
mayorOIgualRango(RangoMayor, RangoMenor):-
mayorRango(RangoMayor, RangoMenor).
mayorOIgualRango(Rango, Rango).
puedeHacer(Persona, cocinarMilanesasConPure):-
trabaja(Persona, profesion(_, cocina), _).
puedeHacer(Persona, recalentarComida):-
trabaja(Persona, profesion(_, cocina), _).
puedeHacer(Persona, recalentarComida):-
trabaja(Persona, _, mechero).
puedeHacer(Persona, producirCiertaCantidadDeMedicina(Gramos)):-
trabaja(Persona, profesion(Exp, alquimia), _),
gramosDeMedicinaQuePuedeProducir(Exp, Gramos).
gramosDeMedicinaQuePuedeProducir(Rango, Gramos):-
mayorOIgualRango(oficial, Rango),
between(0, 100, Gramos).
gramosDeMedicinaQuePuedeProducir(Rango, _):-
mayorRango(Rango, oficial).
puedeHacer(Persona, repararAparato(Herramienta)):-
trabaja(Persona, profesion(_, mecanica), Herramienta).
puedeHacer(migue, repararAparato(Herramienta)):-
trabaja(_, _, Herramienta).
puedeHacer(Persona, obraMaestra(Area)):-
trabaja(Persona, profesion(maestro, Area), _).
puedeHacer(Persona, obraMaestra(alquimia)):-
trabaja(Persona, _, piedraFilosofal).
puedeCubrirEn(PersonaQueCubre, OtraPersona, Tarea):-
puedeHacer(PersonaQueCubre, Tarea),
puedeHacer(OtraPersona, Tarea),
PersonaQueCubre \= OtraPersona.
irremplazablePara(Persona, Tarea):-
puedeHacer(Persona, Tarea),
not(puedeCubrirEn(_, Persona, Tarea)).
comodin(Persona):-
puedeHacer(Persona, _),
forall(puedeHacer(_, Tarea), puedeHacer(Persona, Tarea)).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment