Fellow Squeaker with project you might find interesting
water at tunes.org
Sat Jun 16 20:51:03 UTC 2001
Hi Roel and Squeakers,
I've played around with QSOUL a little and considered your ideas. I
am heavily involved in my own somewhat similar but less orthodox (not
that yours is orthodox in most senses ;) project, and I thought I'd
share what I'd developed.
The source code is at http://www.tunes.org/~water/arrow and most of
it is not relevant to your average Smalltalker. However, I managed to
create a really neat little utility that others interesting in
functional/logic ideas would find possibly useful to look at. (Please
ignore the project file which contains out-of-date code.)
I have these lazy (immutable but often infinite) collections with
caches which can be made either Weak or regular Sets for the various
purposes these collections play. Because they contain arrows (this is
the part most irrelevant to Smalltalkers), I call them graphs, but
otherwise your average Smalltalker should not find them too difficult.
Anyway, part of the protocol is that I can take lazy collections of
objects and filter them with a block as a one-item predicate query.
ArrowGraph class>>top returns basically the top collection type
instance that contains everything when queried. The filter operator
is >> and can be sequentially-applied quite safely.
So basically I can enter:
f _ ArrowWorld objects. "Due to the current arrow architecture."
g _ f >> [:value | value isKindOf: Number].
g includes: (Arrow wrapping: 3/4 in: f). "A membership test."
and g will contain all the numbers. g can accept further filters
itself. You can force addition of elements to the cache of a filter
using +. Filtered lazy collections can also be lazily combined with
set operations | and &. The existential quantification feature
requires a pattern-matcher which is integral to Arrow so it's not
likely your average Smalltalker would want to put up with the whole
Arrow environment overhead to get the benefit (at least until I
mature the architecture and manage to fork a Smalltalk utility
sub-package for the matcher).
Anyway, what do you think?
More information about the Squeak-dev