declarative programming language that supports both functional programming and logic programming models