Re: Declarative constraints in practical terms
Date: 27 Feb 2006 13:47:57 -0800
> "David Cressey" <dcressey_at_verizon.net> wrote in message
> > Is a FORTRAN statement a statement?
> There are people that say this:
> max([H|T],H):-max(T,N), H>=N.
> is more declarative than this:
> 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
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.