If Clause is a list, the list elements are interpreted as consecutive clauses. Otherwise, Clause will be taken as a single clause. Each clause may be a fact or a rule.
This predicate works almost as if all the clauses in the list were written into a file and this file was then compiled using compile/1. It does however not perform any inline expansion on the goals in the clause bodies. To do this, explicit preprocessing of the clauses is required (e.g. using expand_goal/2). This may change in a future release.
The difference between compile_term/1 and assert/1 is that the predicates for which clauses are compiled are not necessarily dynamic with compile_term/1, unless explicitly declared as such. Therefore clauses compiled with compile_term/1 usually replace the existing ones for the same predicate, moreover their source form is not available. Therefore, it can be used instead of assert/1 if the properties of dynamic procedures are not required.
Unlike compiling a file, when an event occurs which is not just a warning, the following clauses are not compiled, the compilation is aborted.
See compile/1 for a more complete list of exceptions that can occur during compilation.
Success: % several facts for different predicates ?- compile_term([p(a), p(b), q(1), r("abc")]). % a single clause ?- compile_term(p(X) :- q(X)). % two clauses for the same predicate ?- compile_term([p(), (p([X|Xs]) :- writeln(X), p(Xs))]). % a declaration and two clauses ?- compile_term([(:- export p/1), p(a), p(b)]). % Compile_term/1 can be used for conditional compilation: :- (exists('/usr/ucb') -> S = bsd; S = sysV), compile_term(os(S)). % Even a whole procedure can be conditionally compiled: :- os(bsd) -> compile_term([ (pred1(X) :- pred2(X), pred3(X)), (pred1(Y) :- ... )]). Error: compile_term([p|X]). (Error 4). compile_term([a|b]). (Error 5). compile_term([[a]]). (Error 94). compile_term([(p :- write(a)), write(b)]). (Error 94). compile_term("a"). (Error 130). compile_term(["a" :- b]). (Error 130). compile_term([p(X) :- 1]). (Error 131). compile_term([a, b, a]). (Error 134). compile_term(!). (Error 135). compile_term(:- var(a)). (Error 143).