ProgCo: Program Helps Self-Correction of Large Language Models