These predicates enable a term to be assembled from its component parts, or split into its component parts, or copied.
functor/3
functor(Term, Name, Arity)
is true iff:
Term
is a compound term with a functor whose
identifier is Name
and arity Arity
, orTerm
is an atomic term equal to Name
and Arity
0.Templates and modes for the predicate are as follows:
functor(-nonvar, +atomic, +integer) functor(+nonvar, ?atomic, ?integer)
Let's start with some simple tests verifying success of failure of single goals.
Goal | Theory | success(String goal,String theory) |
---|---|---|
functor(foo(a, b, c), foo, 3). | null | true |
functor([_|_], '.', 2). | null | true |
functor([], [], 0). | null | true |
functor(foo(a,b,c),X,Y). | null | true |
functor(X,foo,3). | null | true |
functor(X,foo,0). | null | true |
functor(mats(A,B), A, B). | null | true |
functor(1, X, Y). | null | true |
functor(X, 1.1, 0). | null | true |
Goal | Theory | success(String goal,String theory) |
---|---|---|
functor(foo(a), foo, 2). | null | false |
functor(foo(a), fo, 1). | null | false |
Goal | Theory | Variable | Solution | success(String goal,String theory,String variable,Strng solution) |
---|---|---|---|---|
functor(foo(a, b, c), X, Y). | null | X | foo | true |
functor(foo(a, b, c), X, Y). | null | Y | 3 | true |
functor(X, foo, 3). | null | X | foo(_,_,_) | true |
functor(X, foo, 0). | null | X | foo | true |
functor(mats(A, B), A, B). | null | A | mats | true |
functor(mats(A, B), A, B). | null | B | 2 | true |
functor(1, X, Y). | null | X | 1 | true |
functor(1, X, Y). | null | Y | 0 | true |
functor(X, 1.1, 0). | null | X | 1.1 | true |
Tests With Exception
Goal | Theory | success(String goal) | Type Of Error |
---|---|---|---|
functor(X, Y, 3). | null | true | |
functor(X, foo, N). | null | true | |
functor(X, foo, a). | null | true | |
functor(F, 1.5, 1). | null | true | |
functor(F, foo(a), 1). | null | true | |
current_prolog_flag(max_arity, A), X is A + 1, functor(T, foo, X). | null | true | |
Minus1 is 0 - 1, functor(F, foo, Minus1). | null | true |
arg/3
arg(N, Term, Arg)
is true iff the
N
th argument of
Term
is
Arg
.
Templates and modes for the predicate are as follows:
arg(+integer, +compound_term, ?term)
Let's start with some simple tests verifying success of failure of single goals.
Goal | Theory | success(String goal,String theory) |
---|---|---|
arg(1, foo(a,b), a). | null | true |
arg(1, foo(a,b), X). | null | true |
arg(1, foo(a,b), X). | null | true |
arg(1, foo(X,b), a). | null | true |
arg(1, foo(X,b), Y). | null | true |
Goal | Theory | success(String goal,String theory) |
---|---|---|
arg(1, foo(a, b), b). | null | false |
arg(0, foo(a, b), foo). | null | false |
arg(3, foo(3, 4), N). | null | false |
arg(1, foo(X), u(X)). | null | false |
Goal | Theory | Variable | Solution | success(String goal,String theory,String variable,Strng solution) |
---|---|---|---|---|
arg(1, foo(a, b), X). | null | X | a | true |
arg(1, foo(X, b), a). | null | X | a | true |
arg(1, foo(X, b), Y). | null | X | X | true |
Tests With Exception
Goal | Theory | success(String goal) | Type Of Error |
---|---|---|---|
arg(X, foo(a,b), a). | null | true | |
arg(1, X, a). | null | true | |
arg(0, atom, a). | null | true | |
arg(0, 3, a). | null | true |
=../2
(univ)
'=..'(Term, List)
is true iff:
Term
is an atomic term and List
is
the list whose only element is Term
, orTerm
is a compound term and List
is
the list whose head is the functor name of Term
and
whose tail is a list of the arguments of Term
Templates and modes for the predicate are as follows:
'=..'(+nonvar, ?list) '=..'(-nonvar, +list)
Note that
=..
is a predefined operator.
Let's start with some simple tests verifying success of failure of single goals.
Goal | Theory | success(String goal,String theory) |
---|---|---|
'=..'(foo(a,b), [foo, a, b]). | null | true |
'=..'(1, [1]). | null | true |
Goal | Theory | success(String goal,String theory) |
---|---|---|
'=..'(foo(a,b), [foo, b, a]). | null | false |
'=..'(f(X), [f, u(X)]). | null | false |
Goal | Theory | Variable | Solution | success(String goal,String theory,String variable,Strng solution) |
---|---|---|---|---|
'=..'(X, [foo,a,b]). | null | X | foo(a,b) | true |
'=..'(foo(a,b), L). | null | L | [foo,a,b] | true |
'=..'(foo(X, b), [foo, a, Y]). | null | Y | b | true |
Tests With Exception
Goal | Theory | success(String goal) | Type Of Error |
---|---|---|---|
'=..'(X, Y). | null | true | |
'=..'(X, [foo, a | Y]). | null | true | |
'=..'(X, [foo | bar]). | null | true | |
'=..'(X, [Foo, bar]). | null | true | |
'=..'(X, [3, 1]). | null | true | |
'=..'(X, [1.1, foo]). | null | true | |
'=..'(X, [a(b), 1]). | null | true | |
'=..'(X, 4). | null | true |
copy_term/2
copy_term(Term1, Term2)
is true iff
Term2
unifies with a term
T
which is a renamed copy of
Term1
.
Templates and modes for the predicate are as follows:
copy_term(?term, ?term)
Let's start with some simple tests verifying success of failure of single goals.
Goal | Theory | success(String goal,String theory) |
---|---|---|
copy_term(X, Y). | null | true |
copy_term(X, 3). | null | true |
copy_term(_, a). | null | true |
copy_term(_, _). | null | true |
Goal | Theory | success(String goal,String theory) |
---|---|---|
copy_term(a,b). | null | false |
copy_term(a+X, X+b), copy_term(a+X, X+b). | null | false |
copy_term(demoen(X, X), demoen(Y, f(Y))). | null | false |
Goal | Theory | Variable | Solution | success(String goal,String theory,String variable,Strng solution) |
---|---|---|---|---|
copy_term(a+X, X+b). | null | X | a | true |
copy_term(X+X+Y, A+B+B). | null | A | A | true |