is_list/1 is now a builtin.
This commit is contained in:
parent
ad617951ec
commit
b5dc71d080
@ -2821,6 +2821,23 @@ p_unifiable(void)
|
|||||||
return Yap_unify(ARG3, tf);
|
return Yap_unify(ARG3, tf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
Yap_IsListTerm(Term t)
|
||||||
|
{
|
||||||
|
while (!IsVarTerm(t) && IsPairTerm(t)) {
|
||||||
|
t = TailOfTerm(t);
|
||||||
|
}
|
||||||
|
return t == TermNil;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Int
|
||||||
|
p_is_list(void)
|
||||||
|
{
|
||||||
|
return Yap_IsListTerm(Deref(ARG1));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void Yap_InitUtilCPreds(void)
|
void Yap_InitUtilCPreds(void)
|
||||||
{
|
{
|
||||||
Term cm = CurrentModule;
|
Term cm = CurrentModule;
|
||||||
@ -2832,6 +2849,7 @@ void Yap_InitUtilCPreds(void)
|
|||||||
Yap_InitCPred("$non_singletons_in_term", 3, p_non_singletons_in_term, SafePredFlag|HiddenPredFlag);
|
Yap_InitCPred("$non_singletons_in_term", 3, p_non_singletons_in_term, SafePredFlag|HiddenPredFlag);
|
||||||
Yap_InitCPred("term_variables", 2, p_term_variables, 0);
|
Yap_InitCPred("term_variables", 2, p_term_variables, 0);
|
||||||
Yap_InitCPred("term_variables", 3, p_term_variables3, 0);
|
Yap_InitCPred("term_variables", 3, p_term_variables3, 0);
|
||||||
|
Yap_InitCPred("is_list", 1, p_is_list, SafePredFlag);
|
||||||
CurrentModule = TERMS_MODULE;
|
CurrentModule = TERMS_MODULE;
|
||||||
Yap_InitCPred("variable_in_term", 2, p_var_in_term, SafePredFlag);
|
Yap_InitCPred("variable_in_term", 2, p_var_in_term, SafePredFlag);
|
||||||
Yap_InitCPred("term_hash", 4, p_term_hash, SafePredFlag);
|
Yap_InitCPred("term_hash", 4, p_term_hash, SafePredFlag);
|
||||||
|
@ -353,6 +353,7 @@ void STD_PROTO(Yap_InitUserBacks,(void));
|
|||||||
|
|
||||||
/* utilpreds.c */
|
/* utilpreds.c */
|
||||||
Term STD_PROTO(Yap_CopyTerm,(Term));
|
Term STD_PROTO(Yap_CopyTerm,(Term));
|
||||||
|
int STD_PROTO(Yap_IsListTerm,(Term));
|
||||||
Term STD_PROTO(Yap_CopyTermNoShare,(Term));
|
Term STD_PROTO(Yap_CopyTermNoShare,(Term));
|
||||||
int STD_PROTO(Yap_SizeGroundTerm,(Term, int));
|
int STD_PROTO(Yap_SizeGroundTerm,(Term, int));
|
||||||
void STD_PROTO(Yap_InitUtilCPreds,(void));
|
void STD_PROTO(Yap_InitUtilCPreds,(void));
|
||||||
|
@ -8,7 +8,6 @@
|
|||||||
append/3,
|
append/3,
|
||||||
append/2,
|
append/2,
|
||||||
delete/3,
|
delete/3,
|
||||||
is_list/1,
|
|
||||||
last/2,
|
last/2,
|
||||||
member/2,
|
member/2,
|
||||||
memberchk/2,
|
memberchk/2,
|
||||||
@ -83,14 +82,6 @@ delete([Head|List], Elem, [Head|Residue]) :-
|
|||||||
delete(List, Elem, Residue).
|
delete(List, Elem, Residue).
|
||||||
|
|
||||||
|
|
||||||
% is_list(List)
|
|
||||||
% is true when List is a proper List
|
|
||||||
%
|
|
||||||
is_list(L) :- var(L), !, fail.
|
|
||||||
is_list([]).
|
|
||||||
is_list([_|List]) :- is_list(List).
|
|
||||||
|
|
||||||
|
|
||||||
% last(List, Last)
|
% last(List, Last)
|
||||||
% is true when List is a List and Last is identical to its last element.
|
% is true when List is a List and Last is identical to its last element.
|
||||||
% This could be defined as last(L, X) :- append(_, [X], L).
|
% This could be defined as last(L, X) :- append(_, [X], L).
|
||||||
|
@ -1403,12 +1403,7 @@ X_API int PL_is_integer(term_t ts)
|
|||||||
X_API int PL_is_list(term_t ts)
|
X_API int PL_is_list(term_t ts)
|
||||||
{
|
{
|
||||||
YAP_Term t = Yap_GetFromSlot(ts);
|
YAP_Term t = Yap_GetFromSlot(ts);
|
||||||
if (YAP_IsPairTerm(t)) {
|
return Yap_IsListTerm(t);
|
||||||
return 1;
|
|
||||||
} else if (IsAtomTerm(t)) {
|
|
||||||
return t == TermNil;
|
|
||||||
} else
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
X_API int PL_is_number(term_t ts)
|
X_API int PL_is_number(term_t ts)
|
||||||
|
Reference in New Issue
Block a user