Re: Declarative constraints in practical terms

From: <ralphbecket_at_gmail.com>
Date: 27 Feb 2006 13:47:57 -0800
Message-ID: <1141076877.789050.200720_at_z34g2000cwc.googlegroups.com>


x wrote:
> "David Cressey" <dcressey_at_verizon.net> 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