[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: question on assert and retract--ground testing.
From: |
spratt |
Subject: |
Re: question on assert and retract--ground testing. |
Date: |
Tue, 27 Aug 2002 15:32:43 -0500 |
David,
You piqued my interest, so I went to my benchmark source and looked at
the 'ground' implementations. The implementation you provided is very
near what appears to be the fastest implementation among the four I have.
Years ago (on Fri Feb 28 00:33:49 1992, to be precise), Richard A.
O'Keefe posted an extensive note on 'ground' checking in the
comp.lang.prolog newsgroup (as part of a discussion with David Bowen and
Saumy K. Debray). I adopted RAOK's various forms of definition of ground
as part of my 'benchmark' program.
Of these various forms (there are four, using univ and functor/arg in
different ways), the fastest one for gprolog 1.2.13 on my G4 Mac is
currently:
ground(Term) :-
( atomic(Term) -> true
; nonvar(Term),
Term =.. [_|Args],
ground_args(Args)
).
ground_args([]).
ground_args([H|T]) :-
ground(H),
ground_args(T).
This one is two to three times faster than the functor/arg-based
ground/1 programs. Go figure. (I'd expect functor/arg to be faster than
univ.) As RAOK points out, it's important to measure actual performance,
not just speculate. In the case of various ground/1 implementations,
RAOK found that different implementations were the fastest on different
systems.
This one differs from David's is_ground/1 in that:
is_ground/1 uses multiple clauses to test atom, number, and var, instead
of a single clause using the builtin if-then-else in ground/1.
There are no uses of cut in ground/1 or ground_args/1, and particularly
is_ground_list/1 seems to have a spurious final clause and thus needless
uses of cut .
-lindsey
- question on assert and retract, bruno patin, 2002/08/26
- Re: question on assert and retract, Vic Bancroft, 2002/08/26
- Re: question on assert and retract, Timo Karjalainen, 2002/08/27
- Re: question on assert and retract, Vic Bancroft, 2002/08/27
- Re: question on assert and retract, bruno patin, 2002/08/27
- Re: question on assert and retract, spratt, 2002/08/27
- Re: question on assert and retract, spratt, 2002/08/27
- Re: question on assert and retract, David Bennett, 2002/08/27
- Re: question on assert and retract--ground testing.,
spratt <=
- Re: question on assert and retract--ground testing., David Bennett, 2002/08/27
- Re: question on assert and retract, Vic Bancroft, 2002/08/27