Erlang: Super Basic ETS Matching Tutorial
I hate having to look stuff up to get examples, especially when I have to click on more than the first google link to figure things out. As a result, here’s a very, very basic intro do doing matching with ETS and erlang. It’s similar to a SELECT in SQL.
Here’s some simple matching.
44> Tmp = ets:new(bacon, []).
26
45> ets:insert(Tmp, {joe, {fish, 1}}).
true
46> ets:match(Tmp, {‘$1′, {fish, ‘$2′}}).
[[joe,1]]
What’s going on here? Each of your placeholders end up showing up in the result, in a tuple.
You didn’t need to know it was joe who had fish?
47> ets:match(Tmp, {‘_’, {fish, ‘$2′}}).
[[1]]
Lets add a few more guys. Same deal.
48> ets:insert(Tmp, {bob, {fish, 1}}).
true
52> ets:insert(Tmp, {steve, {bacon, 1}}).
true
53> ets:insert(Tmp, {rex, {bacon, 1}}).
true
54> ets:insert(Tmp, {alfonzo, {bacon, 1}}).
true
Who here’s got fish?
55> ets:match(Tmp, {‘$1′, {fish, ‘$2′}}).
[[joe,1],[bob,1]]
Basically, you put the same pattern in the match, and the places that are wild cards that you want to save, you use a ‘$1′ type constant. The ones you don’t care about, use an underscore.
Of course, reading the original ETS specifications might be useful. They review the actual matching spec on the select/2 page.
For a more advanced tutorial covering matching using guards, check out this follow up post on select/2.
.
Recent Comments
- pratibha on MySQL Triggers Tutorial
- pratibha on MySQL Triggers Tutorial
- MySQL Tutorials on MySQL Triggers Tutorial
- jon on The Lack of Flexibility of Stored Procedures in MySQL
- Nithya on The Lack of Flexibility of Stored Procedures in MySQL
- vietnam travel guide on MySQL Triggers Tutorial
- Phil Freo on Making Better Use of your .ackrc file
- PHP Examples on MySQL Triggers Tutorial
- jon on Drizzle Differences from MySQL
- Will on Drizzle Differences from MySQL
Recent Posts
- Vim: Use !make: to avoid auto jumping to files
- Weird Disutils Error When Running Python Scripts within MacVim
- Installing vim-ipython with MacVim
- Applescripting A Remote X-Windows Session for Virt-Manager
- Drizzle Differences from MySQL
- Great Article by the Varnish Architect
- Making Better Use of your .ackrc file
- Nginx pub/sub module
- Coffeescript, Bootstrap, and Less are amazing
- Splitmytab ready for the public!
Categories
- ack (1)
- amazon (1)
- answerbag (6)
- apache (9)
- apple (9)
- awk (2)
- bbedit (2)
- bootstrap (1)
- c++ (3)
- chrome (2)
- cluster (1)
- cocoa (1)
- coffeescript (2)
- collective intelligence (1)
- css (1)
- curl (3)
- db2 (1)
- demand media (1)
- drizzle (1)
- ebay (1)
- eclipse (4)
- erlang (13)
- facebook (1)
- fortran (1)
- gen_server (1)
- git (5)
- google (4)
- haddad (1)
- hdf5 (1)
- html (1)
- innodb (1)
- itunes (1)
- java (2)
- jester (2)
- kvm (2)
- launchbar (1)
- leex (1)
- less (1)
- letsgetnuts.com (1)
- libvirt (1)
- links (6)
- linux (28)
- lucene (1)
- mac (16)
- memcached (1)
- misconception (1)
- mobile (1)
- mono (1)
- mssql (1)
- munin (1)
- mysql (34)
- nginx (1)
- numpy (1)
- oracle (1)
- php (23)
- puppet (4)
- pyparsing (1)
- pytables (1)
- python (13)
- q&a (1)
- quicksilver (1)
- rant (6)
- readynas (1)
- redis (2)
- regex (1)
- replication (1)
- search (1)
- shitty code (1)
- solr (3)
- spaces (1)
- splitmytab (2)
- sshfs (1)
- stored procedure (1)
- svn (5)
- textmate (2)
- tips (25)
- tornado (1)
- trac (1)
- tutorial (4)
- ubuntu (3)
- Uncategorized (5)
- unix (1)
- vim (6)
- virtual box (6)
- vmware (1)
- weird (3)
- wikipedia (1)
- windows (1)
- xcode (1)







