# Arbitrary mathematical relations, not just hashes

Many programming languages (including Perl, Ruby, and PHP) support
hashes:

\$color[‘apple’] = ‘red’;
\$color[‘ruby’] = ‘red’;

\$type[‘apple’] = ‘fruit’;
\$type[‘ruby’] = ‘gem’;

This quickly lets me find the color or type of a given item.

In this sense, color() and type() are like mathematical functions.

However, I can’t easily find all items whose \$color is ‘red’, nor all
items whose \$type is ‘fruit’. In other words, color() and type()
aren’t full mathematical relations.

Of course, I could create the inverse function as I go along:

\$inverse_color[‘red’] = [‘apple’, ‘ruby’]; # uglyish, assigning list to
value

and there are many other ways to do this, but they all seem kludgey.

Is there a clean way to add ‘relation’ support to Perl, Ruby, or PHP?

Is there a language that handles mathematical relations
naturally/natively?

I realize SQL does all this and more, but that seems like overkill for
something this simple?

type.find {|k,v| v == “red”} (will find one match)
type.find_all {|k,v| v == “red”} (will find all matchs)

Alternately, type.invert[‘red’] (will find one match)

Dan

On 4/6/08, Kelly J. [email protected] wrote:

However, I can’t easily find all items whose \$color is ‘red’, nor all
items whose \$type is ‘fruit’. In other words, color() and type()
aren’t full mathematical relations.

Is there a language that handles mathematical relations
naturally/natively?

Why “native” support? What’s wrong with just a
library/package/module/class
that does this? If you don’t find what you want with various ruby
database
API’s out there, you could make your own data-structure for doing this.
I
think one of the most generic structures for holding multi
dimensional/keyed
data would be a kd-tree:

http://en.wikipedia.org/wiki/Kd-tree

In a kd-tree, data is stored and accessed by multiple dimensions (or
keys).
It is a great geometric data structure, but could also be used as a
database.

Eric M. wrote:

On 4/6/08, Kelly J. [email protected] wrote:

However, I can’t easily find all items whose \$color is ‘red’, nor all
items whose \$type is ‘fruit’. In other words, color() and type()
aren’t full mathematical relations.

Is there a language that handles mathematical relations naturally/natively?

Prolog?

Julian L. wrote:

You could use ActiveRecord.

With SQLite as the database, it might be pretty fast unless the
relations are huge. If the problems are large, something like Erlang’s
“Mnesia” database might be better than ActiveRecord.

You could use ActiveRecord.

Julian.

Learn Ruby on Rails! CHECK OUT THE FREE VIDS (LIMITED TIME) VIDEO #3
OUT NOW
http://sensei.zenunit.com/

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.