今天看到
Erlang 动态执行和
erlang动态解释,
实验的代码如下:
-module(dsl).
-compile([export_all]).
broker() ->
receive
{buy, Quantity, Ticker} ->
% 向外部系统下单的具体代码放在这里
%
Msg = "Order placed: buying ~p shares of ~p~n",
io:format(Msg, [Quantity, Ticker]),
broker();
{sell, Quantity, Ticker} ->
% 向外部系统下单的具体代码放在这里
%
Msg = "Order placed: selling ~p shares of ~p~n",
io:format(Msg, [Quantity, Ticker]),
broker()
end.
load_biz_rules(Pid, File) ->
{ok, Bin} = file:read_file(File),
Rules = string:tokens(erlang:binary_to_list(Bin), "\n"),
[rule_to_function(Pid, Rule) || Rule <- Rules].
rule_to_function(Pid, Rule) ->
{ok, Scanned, _} = erl_scan:string(Rule),
[{_,_,Action},{_,_,Quantity},_,_|Tail] = Scanned,
[{_,_,Ticker},_,_,_,{_,_,Operator},_,{_,_,Limit}] = Tail,
to_function(Pid, Action, Quantity, Ticker, Operator, Limit).
to_function(Pid, Action, Quantity, Ticker, Operator, Limit) ->
fun(Ticker_, Price) ->
if
Ticker =:= Ticker_ andalso
( ( Price < Limit andalso Operator =:= less ) orelse
( Price > Limit andalso Operator =:= greater ) ) ->
Pid ! {Action, Quantity, Ticker}; % place an order
true ->
erlang:display("no rule applied")
end
end.
apply_biz_rules(Functions, MarketData) ->
lists:map(fun({Ticker,Price}) ->
lists:map(fun(Function) ->
Function(Ticker, Price)
end, Functions)
end, MarketData),
ok.
用到的biz_rules.txt内容如下:
引用
buy 9000 shares of GOOG when price is less than 500
sell 400 shares of MSFT when price is greater than 30
buy 7000 shares of AAPL when price is less than 160
执行的结果如下:
[root@dev-emp-com work]# erl
Erlang R14B (erts-5.8.1) [source] [64-bit] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.8.1 (abort with ^G)
1> Pid = spawn(fun() -> dsl:broker() end).
<0.34.0>
2>
2> Functions = dsl:load_biz_rules(Pid, "biz_rules.txt").
[#Fun<dsl.0.70661670>,#Fun<dsl.0.70661670>,
#Fun<dsl.0.70661670>]
3> MarketData = [{'GOOG', 498}, {'MSFT', 30}, {'AAPL', 158}].
[{'GOOG',498},{'MSFT',30},{'AAPL',158}]
4> dsl:apply_biz_rules(Functions, MarketData).
"no rule applied"
"no rule applied"
"no rule applied"
"no rule applied"
"no rule applied"
"no rule applied"
"no rule applied"
Order placed: buying 9000 shares of 'GOOG'
ok
Order placed: buying 7000 shares of 'AAPL'
5>
分享到:
相关推荐
使用Erlang编写出的应用运行时通常由成千上万个轻量级进程组成,并通过消息传递相互通讯。进程间上下文切换对于Erlang来说仅仅 只是一两个环节,比起C程序的线程切换要高效得多得多了。 使用Erlang来编写分布式应用...
使用erlang语言实现连接ElasticSearch服务器的客户端代码
Windows下使用NIF扩展Erlang完整例子,包含nif工程项目,erlang引用例子。 配套文章:http://blog.csdn.net/mycwq/article/details/17527485
ErlangB和ErlangC计算工具(exe可执行文件+excel两个) ErlangB和ErlangC计算工具(exe可执行文件+excel两个)
使用erlang进行UDP测试,这几个是为了凑够20字。
Erlang作为一种功能性语言,在实时系统方面非常出色的表现
编写分布式的Erlang程序:陷阱和对策
这个是平时工作中使用到的xml处理,使用的是erlang自带的方法加上自已的一个调整使用的,没找到可以选1分的地方
通过本书,你将学会如何使用erlang编写复杂的并发程序,不管你是否有编程背景和经验。 本书由国际知名的erlang社区领导者根据他们的培训材料编写而成。本书的重点集中在解释erlang的语法和语义,并且介绍了其模式...
Erlang是一个结构化,动态类型...使用Erlang编写出的应用运行时通常由成千上万个轻量级进程组成,并通过消息传递相互通讯。进程间上下文切换对于Erlang来说仅仅 只是一两个环节,比起C程序的线程切换要高效得多得多了。
erlang入门电子书 erlang编程 Introducing Erlang,作者Simon.St.Laurent
学习erlang的时候尝试编写的小例子,使用post方式发送json数据来进行http请求,希望能帮到大家~
erlang 安装包
编写分布式的 Erlang 程序:陷阱和对策 硝烟中的Erlang 深入底层: erlang VM基于多核处理器的可伸缩性特征 erlang VM内部数据共享机制 erlang 消息传递机制 文章地址:...
https://blog.csdn.net/ap114/article/details/118092301
使用Erlang和Yaws开发REST式的服务.详细分析如何使用Erlang和yaws开发REST的服务,有实例
Erlang及其应用Erlang及其应用Erlang及其应用
本书由Erlang之父Joe Armstrong编写,是毋庸置疑的经典著作。书中兼顾了顺序编程、并发编程和分布式编程,重点介绍如何编写并发和分布式的Erlang程序以及如何在多核CPU上自动加速程序,并深入地讨论了开发Erlang应用...