implement sub() function