本文来自:fair-jm.iteye.com 转截请注明出处
defmodule Wordcount do @moduledoc "simple wordcount program by fairjm" @nodecount 3 def start(file) do s = self spawn(fn -> count(file,s) end) end defp count(file,caller) do s = self nodes = Enum.map(1..@nodecount,fn _e -> spawn(fn -> countLine end) end) count = File.stream!(file) |> Enum.reduce(0,fn e,r -> send(Enum.at(nodes,:random.uniform(@nodecount)-1),{e,s});r+1 end) IO.puts("total count is #{count}") v = countDown(count,%{}) nodes |> Enum.each(&(send(&1,Stop))) send(caller,v) end defp countDown(0,m) do IO.puts("ending") m end defp countDown(n,m) do receive do map -> countDown(n-1, Enum.reduce(map,m,fn {k,v},r -> Map.put(r,k,Map.get(r,k,0)+v) end)) after 5000 -> countDown( n-1 , m) end end defp countLine do receive do {line,caller} -> IO.puts("#{inspect(self)} is doing work") m = line |> String.strip |> String.split(" ") |> Stream.filter(&(String.length(&1) > 0)) |> Enum.reduce(%{},fn e,r -> case r[e] do nil -> Map.put(r,e,1) v -> Map.put(r,e,v+1) end end ) send(caller,m) countLine Stop -> IO.puts("#{inspect(self)} quits") _other -> IO.puts("error message") countLine end end end
简单的小练习 代码中用三个erlang进程模拟mapper 一个进程模拟reducer
elixir的语法比erlang的要平易近人好多
有兴趣学的同学 推介买一本elixir in action(http://www.manning.com/juric/)
或者图灵社区有爱的同学整理的教程: http://www.ituring.com.cn/minibook/10831
此外这位同学的github上也维护着中文学习资料: https://github.com/elixir-lang-cn/programming-elixir
相关推荐
4.4 4.5 5.1 5.2 5.3 5.4 5.5 5.6 Mnesia 数据库 调试第五部分:程序库 Guardian(基础) Poolboy Benchee Bypass Distillery(基础) StreamData 3 Introduction 绪⾔第⼀部分:基础 基础集合Enum 模块 模式匹配 控制...
- **应用程序**:Elixir项目可以被打包成一个或多个应用程序。 ##### 3.6 ETS - **ETS概念**:Erlang表系统,提供高效的内存数据库。 - **ETS使用**:使用`:ets.new/1`创建表,使用`get`、`put`等函数操作数据。 ...
《Elixir 程序设计》作者就是15 年前编写了Programming Ruby,将Ruby 带入大众视野的Dave Thomas。这一次他延续了一贯的写作风格,以一个拥有面向对象的开发经历但并未接触过函数式编程的开发者的角度切入,循序渐进...
Elixir 的设计初衷是为了开发可扩展、容错性强的应用程序,尤其适用于构建分布式系统。 #### 二、《Programming Elixir 1.3》概述 《Programming Elixir 1.3》是一本针对 Elixir 1.3 版本的教程书籍,由 Dave ...
编程思想的转变是困难的, 我在读这本书的时候, 再一次感受到了编程思想的转变,从面向对象到面向进程。...在 Elixir 中变得无比简单, 这也是 Elixir 在现代 IT 系统中的价值:最大化 CPU 的处理能力。
1. **获取 Erlang 和 Elixir 安装程序** 首先,我们需要安装Erlang,因为Elixir依赖于它。访问[erlang-solutions.com](https://www.erlang-solutions.com/downloads/download-erlang-otp),找到适合你操作系统的...
Atom-atom-elixir-formatter是一款专为Atom编辑器设计的插件,旨在帮助用户自动格式化Elixir语言的源代码。Atom是一个由GitHub开发的、基于Web技术的开源文本编辑器,它允许用户通过安装各种插件来扩展其功能,以...
Elixir的PostgreSQL驱动程序。 文档: : 例子 iex> {:ok, pid} = Postgrex.start_link(hostname: "localhost", username: "postgres", password: "postgres", database: "postgres") {:ok, #PID<0>} iex> ...
Revised and updated for Elixir 1.7, Elixir in Action, Second Edition teaches you how to apply Elixir to practical problems associated with scalability, fault tolerance, and high availability....
**Elixir编程语言详解** Elixir是一种基于BEAM(Erlang虚拟机)的函数式、并发、面向消息的编程语言。它设计简洁,适合构建分布式、容错性高的系统。在"Programming Elixir 1.6"这本书中,作者深入浅出地介绍了...
- **可枚举接口**:Elixir提供了一套统一的枚举接口,使得处理列表、元组、字符串等变得简单。 - **流处理**:使用流处理可以高效地处理大量数据,尤其是当数据量非常大时。 #### 十二、进程 - **进程概念**:...
包含Elixir in Action,Elixir中文入门文档,Erlang and Elixir for Imperative Programmers,Erlang OTP并发编程实战-中文版,Erlang程序设计(第2版),Erlang编程指南,Functional.Web.Development.with.Elixir....
You’re also investigating designs that help you maximize uptime and manage security., This book is your guide to Elixir, a modern, functional, and concurrent programming language. Because Elixir ...
elixir-style-guide, Elixir语言风格指南,由信条实现 信条 Style 序曲存在这里文档存在的两个原因:这是我的个人风格指南,包括我今天编写的Elixir,但更重要的是,我在野生和适应,因为他们使Elixir更可以读,在...
了解并熟练掌握Elixir的元编程,能够帮助你编写更灵活、更高效的代码,同时也能提升Elixir应用程序的设计和可维护性。通过使用宏和其他元编程工具,你可以创建自定义的 DSL(领域特定语言),实现模块生成,甚至改变...