fix $skip_list (patch from Ulrich Neumerkel). It should be moved to C-code.

This commit is contained in:
Vitor Santos Costa 2009-05-04 11:53:24 -05:00
parent ced3448c9a
commit 9ce8df7bcd

View File

@ -248,14 +248,21 @@ is_list_or_partial_list(L0) :-
:- if(current_prolog_flag(dialect, yap)).
% vsc: I hope it works like this
'$skip_list'(_, Rest, Rest) :- var(Rest), !.
'$skip_list'(_, [], _) :- !, fail.
'$skip_list'(Anything, [_|More], Rest) :-
'$skip_list'(Anything, [_|More], Rest).
'$skip_list'(Anything, [_|More], Rest) :-
'$skip_list'(Anything, More, Rest).
'$skip_list'(_Anything, Rest, Rest).
% UWN: only an approximation
'$skip_list'(N, Xs0,Xs) :-
'$skip_list_i'(0,N, Xs0,Xs).
'$skip_list_i'(N0,N, Xs0,Xs) :-
var(Xs0), !,
N0 = N,
Xs0 = Xs.
'$skip_list_i'(N0,N, [],Xs) :- !,
N0 = N,
Xs = [].
'$skip_list_i'(N0,N, [_|Xs0],Xs) :- !,
N1 is N0 + 1,
'$skip_list_i'(N1,N, Xs0,Xs).
'$skip_list_i'(N,N, Xs,Xs).
:- endif.