|
|
univ(T, L). - Преобразование терма T в список L и обратно |
|
Определение предиката
univ(Term,[F|Args]) if var(Term), !, length(Args, N), functor(Term, F, N), args1(Args,Term,1).
univ(Term, [F|Args]) if functor(Term, F, N), args(0, N, Term, Args).
args1([Arg|Args], Term, N) if arg(N, Term, Arg), is(N1, plus(N,1)), args1(Args, Term, N1).
args1([ ], Term, N).
args(I, N, Term, [Arg|Args]) if lt(I, N), is(I1,plus(I,1)), arg(I1,Term,Arg), args(I1, N, Term, Args).
args(N, N, Term, [ ]).
|
|
Примеры
goal: univ(T, L). |
зацикливание при неунифицированных переменных! |
goal: univ(t(a, b, c, d), L). |
L=[t, a, b, c, d] |
goal: univ(X, [t, a, b, c, d]). |
X=t(a, b, c, d) |
goal: univ(t(a, b, c, d), [t, a, b, c, d]). |
Нет |
|
|