Narrowing as the Operational Semantics of Functional Languages