the initial value is the first argument