Integrating Functional and Logic Programming