Skip to content

Instantly share code, notes, and snippets.

@Tyralion
Created November 10, 2015 18:57
Show Gist options
  • Select an option

  • Save Tyralion/3b1dda17f7e1675a0a25 to your computer and use it in GitHub Desktop.

Select an option

Save Tyralion/3b1dda17f7e1675a0a25 to your computer and use it in GitHub Desktop.
-module(db).
-export([new/0, destroy/1, write/3, delete/2, read/2, match/2]).
% Создание базы
new() -> [].
% Удаление базы
destroy(_) -> ok.
% Запись в базу
write(Name, City, Db) -> [ {Name, City} | Db ].
% Удаление из базы.
delete(Name, Db) -> delete_by_name(Name, Db, []).
% Чтение из базы.
read(Name, Db) -> find_by_name(Name, Db).
% Поиск.
match(City, Db) -> match_by_city(City, Db, []).
% Private
% Удаление по имени.
delete_by_name(_, [], NewDb) -> NewDb;
delete_by_name(S, [{Name, City} | T], NewDb) ->
if
S == Name -> delete_by_name(S, T, NewDb);
true -> delete_by_name(S, T, [{Name, City} | NewDb])
end.
% Поиск по имени.
find_by_name(_, []) -> { error, instance };
find_by_name(S, [{Name, City} | T] ) ->
if
S == Name -> {ok, City};
true -> find_by_name(S, T)
end.
% Поиск имени по городу.
match_by_city(_, [], NewDb) -> NewDb;
match_by_city(S, [{Name, City} | T], NewDb) ->
if
S == City -> match_by_city(S, T, [Name | NewDb]);
true -> match_by_city(S, T, NewDb)
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment