recursive list construction