练习3-4 编写创建一个数据库模块db.erl,它能够模拟数据库 存储,检索和删除元素。
提示使用列表和元组作为你的主要数据结构,当测试程序时,请记住Erlang中变量是单次赋值。
接口:
db:new() =>Db.
db:destroy(Db) =>ok.
db:write(Key,Element,Db) =>newDb.
db:read(Key,Db) =>{ok,Element}|{error,instance}.
db:match(Element,Db) =>[key1,.......,keyN].
代码如下:
%% Author: liu.guangjun
%% Created: 2011-12-5
%% Description: TODO: Add description to db
-module(db).
%%
%% Include files
%%
%%
%% Exported Functions
%%
-export([new/0,write/3,delete/2,read/2,match/2]).
% -export([destroy/1]).
%%
%% Local Functions
%%
new()->[].
%destroy(Db)-> f(Db).
write(Key,Element,Db)->
[{Key,Element}|Db].
%% read(Key,Db)->
%% case lists:keyfind(Key, 1, Db) of
%% {_,Element} ->{ok,Element};
%% false->{error,instance}
%% end.
read(_,[])->{error,instance};
read(Key,[H1|T1])->
case H1 of
{Key,Element} ->
{ok,Element};
_ ->
read(Key,T1)
end.
delete(Key,Db)->delete_element(Key,Db,[]).
delete_element(_,[],List2)->List2;
delete_element(Key,[H1|T1],T2)->
case H1 of
{Key,_} ->
delete_element(Key,T1,T2);
_->
delete_element(Key,T1,[H1|T2])
end.
match(Element,Keys)->match_element(Element,Keys,[]).
match_element(_,[],Keys)->Keys;
match_element(Element,[H|T],T2)->
case H of
{H2,Element} ->
match_element(Element,T,[H2|T2]);
_->
match_element(Element,T,T2)
end.
分享到:
相关推荐
“即便我已经使用Erlang多年,在编程的时候仍然需要参考《Erlang编程指南》。不同层次的Erlang程序员都会发现本书是有价值的学习和参考资料..., 《Erlang编程指南》每章末尾都提供了练习题,并且由简单的示例贯穿全书。
内容概要:本文档详细介绍了Erlang编程语言及其并行编程模型,并重点阐述了Erlang OTP框架的特性和应用场景。首先,文档简述了Erlang语言的特点,包括轻量级进程、模式匹配和热代码升级等特性,以及它在构建高可用、...
递归是Erlang编程中不可或缺的一部分,因为Erlang的列表操作通常是基于递归的。Erlang内置了调试和跟踪工具,让开发者可以轻松地发现和修复并发程序中的错误。 在学习Erlang的过程中,将不可避免地需要掌握网络编程...
《编程灵丹妙药》是一本面向Elixir编程语言的学习指南,由Dave Thomas撰写,旨在帮助读者深入理解和掌握Elixir的精髓。这本书以其独特的视角和生动的比喻,将编程概念转化为易于理解的“灵丹妙药”。在描述中提到的...
3. **元编程**:Elixir支持元编程,允许在运行时动态地创建和修改代码,这使得编写灵活和可扩展的库变得容易。 4. **OTP(Open Telecom Platform)框架**:Elixir充分利用了OTP,这是一个为构建分布式、容错系统...
【标题】"cs4550-hw06" 是一个与计算机...总的来说,cs4550-hw06 作业会涵盖 Elixir 语言的核心概念和实践,通过编程练习帮助学生深化对 Elixir 及其生态系统理解,提升他们在并发、分布式计算和函数式编程方面的技能。
【描述】中提到的步骤是RabbitMQ基础操作的实践指南: 1- **启动RabbitMQ服务器**:RabbitMQ是基于Erlang语言开发的消息中间件,它提供了一个可扩展、高可用性的消息队列服务。在使用前,我们需要先安装RabbitMQ,...
Elixir 是一种基于 Erlang VM(BEAM)的函数式编程语言,设计用于构建可扩展的并发系统,常用于分布式和实时系统。 在压缩包 "Walter3semestre-main" 中,我们通常可以期待找到一系列与 Elixir 编程相关的资源,...
8. **并发编程模型**:除了传统的线程模型,还有如Actor模型(例如Erlang语言),Promise/Future模式(用于异步编程),反应式编程(如Reactor或RxJava)等。 9. **Java并发库**:Java提供了丰富的并发工具类,如`...
4. **项目模板**:研究组可能提供了基础的项目模板,便于成员进行实践练习,这些模板可能涵盖了一些实际应用场景,如实时聊天应用、Web服务器等。 5. **测试用例**:为了确保代码质量,研究组可能分享了一些测试...