What language was designed based on a theory of recursive functions and is considered to be an ideal language for solving difficult or complex problems?