ZiGGi

Untitled

Oct 27th, 2015
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. implement main
  2.     open core
  3.  
  4.     % facts
  5.     class facts - parentDB
  6.         parent : (string Parent, string Children).
  7.  
  8.     % is parent
  9.     class predicates
  10.         is_parent: (string Parent, string Children) nondeterm (i,i).
  11.     clauses
  12.         is_parent(Parent, Children) :-
  13.             parent(Parent, Children).
  14.  
  15.     % get children
  16.     class predicates
  17.         get_children: (string Parent, string Children) nondeterm (i,o).
  18.     clauses
  19.         get_children(Parent, Children) :-
  20.             parent(Parent, Children).
  21.  
  22.     % get parent
  23.     class predicates
  24.         get_parent: (string Children, string Parent) nondeterm (i,o).
  25.     clauses
  26.         get_parent(Children, Parent) :-
  27.             parent(Parent, Children).
  28.  
  29.     % print all
  30.     class predicates
  31.         print_all: (string*, string*) nondeterm.
  32.     clauses
  33.         print_all([], []).
  34.         print_all([HParent|TParent], [HChildren|TChildren]) :-
  35.             stdio::writef("Родитель: %, ребёнок: %\n", HParent, HChildren),
  36.             print_all(TParent, TChildren).
  37.  
  38.     % queries
  39.     class predicates
  40.         query_marina_sasha: ().
  41.         query_aleksey_olga: ().
  42.         query_nikolai_children: ().
  43.         query_ivan_parent: ().
  44.         query_print_all: ().
  45.     clauses
  46.         query_marina_sasha() :-
  47.             is_parent("Марина", "Саша"),
  48.             !,
  49.             stdio::write("Марина родитель Саши\n")
  50.             ;
  51.             stdio::write("Марина НЕ родитель Саши\n").
  52.         query_aleksey_olga() :-
  53.             is_parent("Алексей", "Ольга"),
  54.             !,
  55.             stdio::write("Алексей родитель Ольги\n")
  56.             ;
  57.             stdio::write("Алексей НЕ родитель Ольги\n").
  58.         query_nikolai_children() :-
  59.             get_children("Николай", Children),
  60.             !,
  61.             stdio::writef("% - ребёнок Николая\n", Children)
  62.             ;
  63.             stdio::write("У Николая нет детей\n").
  64.         query_ivan_parent() :-
  65.             get_parent("Иван", Parent),
  66.             !,
  67.             stdio::writef("% - родитель Ивана\n", Parent)
  68.             ;
  69.             stdio::write("У Ивана нет родителей\n").
  70.         query_print_all() :-
  71.             LParent = [Children || parent(_, Children)],
  72.             LChildren = [Parent || parent(Parent, _)],
  73.             print_all(LParent, LChildren),
  74.             !;
  75.             succeed().
  76.  
  77.     % data
  78.     clauses
  79.         parent("Илья", "Марина").
  80.         parent("Марина", "Ира").
  81.         parent("Елена", "Иван").
  82.         parent("Николай", "Ира").
  83.         parent("Ольга", "Алексей").
  84.         parent("Марина", "Саша").
  85.         parent("Сергей", "Иван").
  86.  
  87.     % main
  88.     clauses
  89.         run() :-
  90.             console::init(),
  91.  
  92.             stdio::write("\nЗапрос №1:\n"),
  93.             query_marina_sasha(),
  94.  
  95.             stdio::write("\nЗапрос №2:\n"),
  96.             query_aleksey_olga(),
  97.  
  98.             stdio::write("\nЗапрос №3:\n"),
  99.             query_nikolai_children(),
  100.  
  101.             stdio::write("\nЗапрос №4:\n"),
  102.             query_ivan_parent(),
  103.  
  104.             stdio::write("\nЗапрос №5:\n"),
  105.             query_print_all().
  106.  
  107.  
  108. end implement main
  109.  
  110. goal
  111.     mainExe::run(main::run).
Advertisement
Add Comment
Please, Sign In to add comment