nth1( A, B, C ) :- ( number( A ) -> nth( A, B, C ) ; var( A ), nth1_gen_yap( B, 1, A, C ) ). nth1_gen_yap( [H|T], Acc, Acc, H ). nth1_gen_yap( [_H|T], Acc, N, Nth ) :- NxAcc is Acc + 1, nth1_gen_yap( T, NxAcc, N, Nth ). nth1( A, B, C, D ) :- ( number( A ) -> nth( A, B, C, D ) ; var( A ), nth1_gen_yap( B, 1, A, C, D ) ). nth1_gen_yap( [H|T], Acc, Acc, H, T ). nth1_gen_yap( [H|T], Acc, N, Nth, [H|Rest] ) :- NxAcc is Acc + 1, nth1_gen_yap( T, NxAcc, N, Nth, Rest ).