update
tail recursion. TODO: sublist