Re: Declarative constraints in practical terms

From: <>
Date: 27 Feb 2006 13:47:57 -0800
Message-ID: <>

x wrote:
> "David Cressey" <> wrote in message
> news:y0EMf.7424$UN1.5544_at_trndny08...
> > Is a FORTRAN statement a statement?
> There are people that say this:
> max([M],M).
> max([H|T],M):-max(T,M),H<M.
> max([H|T],H):-max(T,N), H>=N.
> is more declarative than this:
> max([],M,M).
> max([H|T],M,R):-H<M, max(T,M,R).
> max([H|T],M,R):-H>=M, max(T,H,R).

Yes, but those people would be fools :-)

(And those predicates don't even have the same arity, so they can't denote the same relations.)

> I don't know why but I think it has something to do with the fact that in
> some PROLOG implementations the inequality tests are not allowed on unbouded
> variables.

That's all Prolog implementations. Despite what is often said, Prolog is not a declarative language; it's an imperative language with unification and backtracking.

Rougly speaking, a declarative logic language should - not have side effects;
- be order independent (i.e., respect the commutativity of conjunction and disjunction and be sound w.r.t.
negation, if supported); and
- functions (if any) should be referentially transparent.

Have a look at Mercury for an example of a pragmatic, general purpose, high performance declarative programming language.

  • Ralph
Received on Mon Feb 27 2006 - 22:47:57 CET

Original text of this message