Skip to content

Instantly share code, notes, and snippets.

@pinne
Created January 18, 2013 14:14
Show Gist options
  • Save pinne/4564779 to your computer and use it in GitHub Desktop.
Save pinne/4564779 to your computer and use it in GitHub Desktop.
% Exercise 2.4
% Database Handling Using Lists
%
% skers@kth.se 2013
%
-module(db).
-export([ new/0
, destroy/1
, write/3
, read/2
, match/2
, delete/2
]).
% New
new() ->
[].
% Destroy
destroy(_) ->
[].
% Write
write(Key, City, Db) ->
write(Key, City, Db, []).
write(Key, City, [], NewDb) ->
NewDb ++ [{Key, City}];
write(Key, City, [{OldKey, OldCity}|T], NewDb) when Key /= OldKey ->
write(Key, City, T, [{OldKey, OldCity}|NewDb]);
write(Key, City, [{OldKey, _}|T], NewDb) when Key == OldKey ->
write(Key, City, T, NewDb).
% Read
read(_, []) ->
{error, instance};
read(Key, [{Name, City}|_]) when Key == Name ->
{ok, City};
read(Key, [_|T]) ->
read(Key, T).
% Match
match(Key, Db) ->
match(Key, Db, []).
match(_, [], Results) ->
Results;
match(Key, [{Name, City}|T], Result) when Key == City ->
match(Key, T, [Name | Result]);
match(Key, [_|T], Result) ->
match(Key, T, Result).
% Delete
delete(Key, Db) ->
delete(Key, Db, []).
delete(_, [], NewDb) ->
NewDb;
delete(Key, [{Name, _}|T], NewDb) when Key == Name ->
delete(Key, T, NewDb);
delete(Key, [H|T], NewDb) ->
delete(Key, T, [H|NewDb]).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment