:-module(nreverse_on_co,[],[]).
'$applied_packages'([prelude,nonpure,condcomp,assertions,regtypes,nativeprops,rtchecks_shallow,predefres(res_steps),resdefs,resdefs/resources_decl,basicmodes,argnames,expander]).
:-add_clause_trans(expander_tr:expand_clause/4,9910).
:-pred nreverse(Xs,Ys):list*term=>list*list.
:-pred appendlast(Xs,Y,Zs):list*term*var=>list*term*list.

nreverse(_1,_2) :-
        'nreverse$pre'(_1,_2,_3),
        'nreverse$cls'(_1,_2),
        'nreverse$post'(_1,_2,_3).
'nreverse$pre'(_1,_2,_5) :-
        reify_check(list(_1),[_1],_3),
        reify_check(term(_2),[_2],_4),
        _6 is _3/\_4,
        _5 is _6,
        _7 is _5,
        warn_if_false(_7,'CP').
'nreverse$post'(_1,_2,_5) :-
        reify_check(list(_1),[_1],_3),
        reify_check(list(_2),[_2],_4),
        _6 is _3/\_4,
        _7 is _5#1\/_6,
        _8 is _7,
        warn_if_false(_8,'AP').
'nreverse$cls'([],[]).
'nreverse$cls'([X|Xs],Ys) :-
        nreverse(Xs,Ys0),
        appendlast(Ys0,X,Ys).
appendlast(_1,_2,_3) :-
        'appendlast$pre'(_1,_2,_3,_4),
        'appendlast$cls'(_1,_2,_3),
        'appendlast$post'(_1,_2,_3,_4).
'appendlast$pre'(_1,_2,_3,_7) :-
        reify_check(list(_1),[_1],_5),
        reify_check(term(_2),[_2],_6),
        reify_check(var(_3),[_3],_4),
        _8 is _4/\(_5/\_6),
        _7 is _8,
        _9 is _7,
        warn_if_false(_9,'CP').
'appendlast$post'(_1,_3,_2,_7) :-
        reify_check(list(_1),[_1],_5),
        reify_check(list(_2),[_2],_4),
        reify_check(term(_3),[_3],_6),
        _8 is _4/\(_5/\_6),
        _9 is _7#1\/_8,
        _10 is _9,
        warn_if_false(_10,'AP').
'appendlast$cls'([],X,[X]).
'appendlast$cls'([E|Y],X,[E|T]) :-
        appendlast(Y,X,T).