public final class TailRecursivePredicateMetaData extends Object
Projog uses the following rules to determine if a user defined predicate is "tail recursive" (and therefore suitable
for tail recursion optimisation using a TailRecursivePredicate
):
Examples of tail recursive predicates suitable for tail recursion optimisation:
:- list([]). list([X|Xs]) :- list(Xs).
r(N). r(N) :- N > 1, N1 is N-1, r(N1).
writeAndRepeat(N) :- write(N), nl. writeAndRepeat(N) :- N > 1, N1 is N-1, writeAndRepeat(N1).
TailRecursivePredicate
Modifier and Type | Method and Description |
---|---|
static TailRecursivePredicateMetaData |
create(KnowledgeBase kb,
List<ClauseModel> clauses)
Returns a new
TailRecursivePredicateMetaData representing the user defined predicate defined by the
specified clauses or null if the predicate is not tail recursive. |
ClauseModel |
getFirstClause() |
ClauseModel |
getSecondClause() |
boolean |
isPotentialSingleResult() |
boolean |
isSingleResultIfArgumentImmutable(int idx) |
boolean |
isTailRecursiveArgument(int idx) |
public static TailRecursivePredicateMetaData create(KnowledgeBase kb, List<ClauseModel> clauses)
TailRecursivePredicateMetaData
representing the user defined predicate defined by the
specified clauses or null
if the predicate is not tail recursive.clauses
- the clauses that the user defined predicate consists ofTailRecursivePredicateMetaData
or null
if the predicate is not tail recursivepublic ClauseModel getFirstClause()
public ClauseModel getSecondClause()
public boolean isPotentialSingleResult()
public boolean isTailRecursiveArgument(int idx)
public boolean isSingleResultIfArgumentImmutable(int idx)
Copyright © 2024. All rights reserved.