@@ -329,7 +329,7 @@ comma_dispatch_call_list([G1]) :-
|
||||
|
||||
:- non_counted_backtracking univ_errors/3.
|
||||
univ_errors(Term, List, N) :-
|
||||
'$skip_max_list'(N, -1, List, R),
|
||||
'$skip_max_list'(N, _, List, R),
|
||||
( var(R) ->
|
||||
( var(Term),
|
||||
throw(error(instantiation_error, (=..)/2)) % 8.5.3.3 a)
|
||||
@@ -399,7 +399,7 @@ get_args([Arg|Args], Func, I0, N) :-
|
||||
:- meta_predicate parse_options_list(?, 0, ?, ?, ?).
|
||||
|
||||
parse_options_list(Options, Selector, DefaultPairs, OptionValues, Stub) :-
|
||||
'$skip_max_list'(_, -1, Options, Tail),
|
||||
'$skip_max_list'(_, _, Options, Tail),
|
||||
( Tail == [] ->
|
||||
true
|
||||
; var(Tail) ->
|
||||
@@ -452,7 +452,7 @@ parse_write_options_(max_depth(MaxDepth), max_depth-MaxDepth) :-
|
||||
).
|
||||
|
||||
must_be_var_names_list(VarNames) :-
|
||||
'$skip_max_list'(_, -1, VarNames, Tail),
|
||||
'$skip_max_list'(_, _, VarNames, Tail),
|
||||
( Tail == [] ->
|
||||
must_be_var_names_list_(VarNames, VarNames)
|
||||
; var(Tail) ->
|
||||
@@ -549,7 +549,7 @@ can_be_list(List, _) :-
|
||||
var(List),
|
||||
!.
|
||||
can_be_list(List, _) :-
|
||||
'$skip_max_list'(_, -1, List, Tail),
|
||||
'$skip_max_list'(_, _, List, Tail),
|
||||
( var(Tail) ->
|
||||
true
|
||||
; Tail == []
|
||||
@@ -1196,7 +1196,7 @@ atom_length(Atom, Length) :-
|
||||
).
|
||||
|
||||
atom_chars(Atom, List) :-
|
||||
'$skip_max_list'(_, -1, List, Tail),
|
||||
'$skip_max_list'(_, _, List, Tail),
|
||||
( ( Tail == [] ; var(Tail) ) ->
|
||||
true
|
||||
; throw(error(type_error(list, List), atom_chars/2))
|
||||
@@ -1214,7 +1214,7 @@ atom_chars(Atom, List) :-
|
||||
).
|
||||
|
||||
atom_codes(Atom, List) :-
|
||||
'$skip_max_list'(_, -1, List, Tail),
|
||||
'$skip_max_list'(_, _, List, Tail),
|
||||
( ( Tail == [] ; var(Tail) ) ->
|
||||
true
|
||||
; throw(error(type_error(list, List), atom_codes/2))
|
||||
@@ -1271,9 +1271,9 @@ sub_atom(Atom, Before, Length, After, Sub_atom) :-
|
||||
; atom_chars(Atom, AtomChars),
|
||||
lists:append(BeforeChars, LengthAndAfterChars, AtomChars),
|
||||
lists:append(LengthChars, AfterChars, LengthAndAfterChars),
|
||||
'$skip_max_list'(Before, -1, BeforeChars, []),
|
||||
'$skip_max_list'(Length, -1, LengthChars, []),
|
||||
'$skip_max_list'(After, -1, AfterChars, []),
|
||||
'$skip_max_list'(Before, _, BeforeChars, []),
|
||||
'$skip_max_list'(Length, _, LengthChars, []),
|
||||
'$skip_max_list'(After, _, AfterChars, []),
|
||||
atom_chars(Sub_atom, LengthChars)
|
||||
).
|
||||
|
||||
|
||||
@@ -118,7 +118,7 @@ read_from_chars(Chars, Term) :-
|
||||
instantiation_error(read_from_chars/2)
|
||||
; nonvar(Term) ->
|
||||
throw(error(uninstantiation_error(Term), read_from_chars/2))
|
||||
; '$skip_max_list'(_, -1, Chars, Chars0),
|
||||
; '$skip_max_list'(_, _, Chars, Chars0),
|
||||
Chars0 == [],
|
||||
partial_string(Chars) ->
|
||||
true
|
||||
|
||||
@@ -80,7 +80,7 @@ character(C) :-
|
||||
atom_length(C, 1).
|
||||
|
||||
ilist(Ls) :-
|
||||
'$skip_max_list'(_, -1, Ls, Rs),
|
||||
'$skip_max_list'(_, _, Ls, Rs),
|
||||
( var(Rs) ->
|
||||
instantiation_error(must_be/2)
|
||||
; Rs == []
|
||||
@@ -124,7 +124,7 @@ can_(list, Term) :- list_or_partial_list(Term).
|
||||
can_(boolean, Term) :- boolean(Term).
|
||||
|
||||
list_or_partial_list(Ls) :-
|
||||
'$skip_max_list'(_, -1, Ls, Rs),
|
||||
'$skip_max_list'(_, _, Ls, Rs),
|
||||
( var(Rs) -> true
|
||||
; Rs == []
|
||||
).
|
||||
|
||||
@@ -50,27 +50,20 @@
|
||||
:- meta_predicate foldl(3, ?, ?, ?).
|
||||
:- meta_predicate foldl(4, ?, ?, ?, ?).
|
||||
|
||||
|
||||
length(Xs, N) :-
|
||||
var(N),
|
||||
!,
|
||||
'$skip_max_list'(M, -1, Xs, Xs0),
|
||||
( Xs0 == [] -> N = M
|
||||
; var(Xs0) -> length_addendum(Xs0, N, M)
|
||||
).
|
||||
length(Xs, N) :-
|
||||
integer(N),
|
||||
N >= 0,
|
||||
!,
|
||||
'$skip_max_list'(M, N, Xs, Xs0),
|
||||
( Xs0 == [] -> N = M
|
||||
; var(Xs0) -> R is N-M, length_rundown(Xs0, R)
|
||||
).
|
||||
length(Xs0, N) :-
|
||||
'$skip_max_list'(M, N, Xs0,Xs),
|
||||
!,
|
||||
( Xs == [] -> N = M
|
||||
; nonvar(Xs) -> var(N), throw(error(resource_error(finite_memory),_))
|
||||
; nonvar(N) -> R is N-M, length_rundown(Xs, R)
|
||||
; N == Xs -> throw(error(resource_error(finite_memory),_))
|
||||
; length_addendum(Xs, N, M)
|
||||
).
|
||||
length(_, N) :-
|
||||
integer(N), !,
|
||||
domain_error(not_less_than_zero, N, length/2).
|
||||
integer(N), !,
|
||||
domain_error(not_less_than_zero, N, length/2).
|
||||
length(_, N) :-
|
||||
type_error(integer, N, length/2).
|
||||
type_error(integer, N, length/2).
|
||||
|
||||
length_addendum([], N, N).
|
||||
length_addendum([_|Xs], N, M) :-
|
||||
@@ -288,8 +281,8 @@ list_min_(N, Min0, Min) :-
|
||||
% or partial list.
|
||||
|
||||
permutation(Xs, Ys) :-
|
||||
'$skip_max_list'(Xlen, -1, Xs, XTail),
|
||||
'$skip_max_list'(Ylen, -1, Ys, YTail),
|
||||
'$skip_max_list'(Xlen, _, Xs, XTail),
|
||||
'$skip_max_list'(Ylen, _, Ys, YTail),
|
||||
( XTail == [], YTail == [] % both proper lists
|
||||
-> Xlen == Ylen
|
||||
; var(XTail), YTail == [] % partial, proper
|
||||
|
||||
@@ -89,7 +89,7 @@ because the order it relies on may have been changed.
|
||||
% setof/3.
|
||||
|
||||
is_ordset(Term) :-
|
||||
'$skip_max_list'(_, -1, Term, Tail), Tail == [], %% is_list(Term),
|
||||
'$skip_max_list'(_, _, Term, Tail), Tail == [], %% is_list(Term),
|
||||
is_ordset2(Term).
|
||||
|
||||
is_ordset2([]).
|
||||
|
||||
Reference in New Issue
Block a user