| A lot of these comments don't make any sense to me. > Prolog predicates are not first class values. Predicates are trivially called, even as variables, with the `call/N` metapredicate. > Mapping and filtering is awkward In what sense? The declarative semantics...? > Arithmetic is awkward In what sense...? Have you seen clpz? > The CLP examples aren't integrated with Prolog's Horn clause resolution model In what sense...? clpz and clpb do this magnificently. > Indexing and search strategies are not under programmer control. Most ship with SLG resolution or you can write your own resolution strategy with a simple metainterpreter as an intermediate exercise -- but SLD resolution is already pretty good. In general not needing to think about the indexing and search strategies are a highlight of the declarative semantics of Prolog, its odd to see someone with a "long standing love affair with Prolog" list this as a drawback. > Modes are awkward. Modal programming is a defining feature of Prolog. Tell me more about this "long standing love affair", again? > I've been an enthusiastic Prolog programmer since the mid 1980s If you are still struggling with mapping, filtering, arithmetic, `call/N`, and CLP in Prolog after nearly 45 years of "enthusiastic" programming, I'd highly recommend checking out Triska's Power of Prolog videos for some guidance, I think you will find them very illuminating. https://youtube.com/@thepowerofprolog |
Yes, that is the definition of "predicates are not first class values". Some things can be called without call/N. Other things can not be called without call/N. These are two separate classes of things. Both of these classes cannot be the first class.