Advertisement
Guest User

my_jps

a guest
May 28th, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 1.59 KB | None | 0 0
  1. learn(Predicate, VarsIndex, Rules) :-
  2.   collect_objects(Objects),
  3.   findall(pos(Args), (known_fact(Fact), Fact =.. [Predicate|Args]), PosExamples),
  4.   gen_neg_examples(Objects, PosExamples, VarsIndex, NegExamples),
  5.   write_ln(PosExamples),
  6.   write_ln(NegExamples),
  7.   learn_rules(PosExamples, NegExamples, Predicate, VarsIndex, Rules).
  8.  
  9.  
  10. collect_objects(Objects) :-
  11.   findall(Args, (known_fact(Fact), Fact =.. [_|Args]), ArgList),
  12.   conc_lists(ArgList, RawArgList),
  13.   setof(X, member(X, RawArgList), Objects).
  14.  
  15. conc_lists([], []).
  16.  
  17. conc_lists([First | Rest], RawList) :-
  18.   append(First, Result, RawList),
  19.   conc_lists(Rest, Result).
  20.  
  21. gen_neg_examples(Objects, PosExamples, N, NegExamples) :-
  22.   findall(P, permute(Objects, N, P), Permutations),
  23.   extract_args(PosExamples, PosList),
  24.   build_neg_examples(Permutations, PosList, NegExamples).
  25.  
  26. permute(_, 0, []).
  27.  
  28. permute(Objects, N, [X | Result]) :-
  29.   M is N - 1,
  30.   member(X, Objects),
  31.   delete(Objects, X, RestObjects),
  32.   permute(RestObjects, M, Result).
  33.  
  34. extract_args([], []).
  35.  
  36. extract_args([Example | RestExamples], [Args | Result]) :-
  37.   Example =.. [_ | Args],
  38.   extract_args(RestExamples, Result).
  39.  
  40. build_neg_examples([], _, []).
  41.  
  42. build_neg_examples(
  43.     [Permutation | RestPermutations],
  44.     PosList,
  45.     [Out | Result]) :-
  46.   not(member(Permutation, PosList)),
  47.   Out =.. [neg | Permutation],
  48.   build_neg_examples(RestPermutations, PosList, Result).
  49.  
  50. build_neg_examples(
  51.     [Permutation | RestPermutations],
  52.     PosList,
  53.     Result) :-
  54.   member(Permutation, PosList),
  55.   build_neg_examples(RestPermutations, PosList, Result).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement