No estoy del todo seguro si esto es lo que necesita, pero puede expresar fácilmente que una clase tiene un conjunto de propiedades al crear una estructura gráfica de hechos (vea la lista de propiedades a continuación y la regla para encontrar las propiedades un conjunto).
A continuación, para expresar la composición de ese conjunto de propiedades que necesita otro conjunto de datos de composición y regla de que descubra cualquier sub-propiedades de la clase y como resultado de las cosas que puede estar compuesto por.
me he dado un ejemplo de código siguiente, así que ayudan a explicar.
property(bird, red_robotic_bird).
property(red, red_robotic_bird).
property(robot, red_robotic_bird).
property(tasty, cake).
property(red_robotic_bird, macaw).
property(Property, Thing) :-
property(PropertySet, Thing),
property(Property, PropertySet).
composition(buttons, red_robotic_bird).
composition(cheese, red_robotic_bird).
composition(wire, red_robotic_bird).
composition(flour, cake).
composition(Material, Thing) :-
property(Property, Thing),
composition(Material, Property).
Consultas de ejemplo
?- composition(Material, macaw).
Material = buttons ;
Material = cheese ;
Material = wire ;
no
?- composition(buttons, Thing).
Thing = red_robotic_bird ;
Thing = macaw ;
no
?- composition(flour, macaw).
no
?- property(bird, macaw).
yes
?- property(bird, cake).
no
property(Property, macaw).
Property = red_robotic_bird ;
Property = bird ;
Property = red ;
Property = robot ;
no
normas de Prolog en breve.
Las reglas son esencialmente solo hechos (por ejemplo, animal(cat).
) que están condicionados a que otras reglas o hechos sean ciertos. Una regla se compone de una cabeza y un cuerpo (head :- body.
). Un cuerpo es una prueba lógica más comúnmente expresada en forma normal conjuntiva (A/\ B/\ C). El operador y en prolog es ,
, el operador o es ;
(pero su uso no se recomienda en las reglas), y el período (.
) indica el final de una regla o hecho.
Tenga en cuenta que si una regla de plazo o hecho en el cuerpo falla, entonces Prolog dar marcha atrás y pedir una respuesta alternativa de una regla o un hecho anterior y vuelva a intentarlo. Considere el ejemplo algo artificial a continuación.
share_same_colour (FruitA, FruitB): - color (Color, FruitA), color (Color, Fruta).
Si ejecutamos la consulta share_same_colour(apple, strawberry).
, entonces colour(Colour, apple).
puede devolver Color como verde. Sin embargo, no hay fresas verdes, por lo que el prólogo retrocederá y preguntará en qué otros colores entran las manzanas.La siguiente respuesta podría ser roja, sobre la cual la segunda declaración de color tendría éxito y la regla completa sería verdadera.
¿Las Dunas responden dirigiéndose en la dirección correcta para usted? Si es así, puedo ilustrar la traducción a core.logic. – dnolen
Agradecería la traducción a core.logic ya que no estoy tan familiarizado con la sintaxis de otros idiomas. Sin embargo, puedo darle crédito después de responder la respuesta. – bmillare