Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- learn(Predicate, VarsIndex, Rules) :-
- collect_objects(Objects),
- findall(pos(Args), (known_fact(Fact), Fact =.. [Predicate|Args]), PosExamples),
- gen_neg_examples(Objects, PosExamples, VarsIndex, NegExamples),
- write_ln(PosExamples),
- write_ln(NegExamples),
- learn_rules(PosExamples, NegExamples, Predicate, VarsIndex, Rules).
- collect_objects(Objects) :-
- findall(Args, (known_fact(Fact), Fact =.. [_|Args]), ArgList),
- conc_lists(ArgList, RawArgList),
- setof(X, member(X, RawArgList), Objects).
- conc_lists([], []).
- conc_lists([First | Rest], RawList) :-
- append(First, Result, RawList),
- conc_lists(Rest, Result).
- gen_neg_examples(Objects, PosExamples, N, NegExamples) :-
- findall(P, permute(Objects, N, P), Permutations),
- extract_args(PosExamples, PosList),
- build_neg_examples(Permutations, PosList, NegExamples).
- permute(_, 0, []).
- permute(Objects, N, [X | Result]) :-
- M is N - 1,
- member(X, Objects),
- delete(Objects, X, RestObjects),
- permute(RestObjects, M, Result).
- extract_args([], []).
- extract_args([Example | RestExamples], [Args | Result]) :-
- Example =.. [_ | Args],
- extract_args(RestExamples, Result).
- build_neg_examples([], _, []).
- build_neg_examples(
- [Permutation | RestPermutations],
- PosList,
- [Out | Result]) :-
- not(member(Permutation, PosList)),
- Out =.. [neg | Permutation],
- build_neg_examples(RestPermutations, PosList, Result).
- build_neg_examples(
- [Permutation | RestPermutations],
- PosList,
- Result) :-
- member(Permutation, PosList),
- build_neg_examples(RestPermutations, PosList, Result).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement