Go Bue !

You are what you do.


  • 首页

  • 分类

  • 归档

  • 标签

Elixir-散列表、散列字典、关键字列表、集合与结构体

发表于 2016-07-06   |   分类于 Elixir   |  

字典

散列表和散列字典都实现了 Dict 的行为。

关键字模块也实现了,但是关键字列表允许出现重复的值,但是要用 Keyword 模块才能访问。

1
2
3
defmodule Demo do
def values(dict), do: dict |> Dict.values |> Enum.sum
end
1
2
3
4
5
iex> hd = [one: 1,two: 2,three: 3] |> Enum.into HashDict.new
#HashDict<[two: 2, one: 1, three: 3]>
iex> IO.puts Demo.values(hd)
6
:ok
阅读全文 »

Elixir-列表与递归

发表于 2016-07-06   |   分类于 Elixir   |  

递归 才是处理列表的最佳工具。

头部和尾部

列表可以通过管道运算符 | 来分隔头部和尾部。

1
2
3
4
5
6
iex> [head | tail] = [1, 2, 3]
[1, 2, 3]
iex> head
1
iex> tail
[2, 3]
  • 空列表长度为 0
  • 列表长度等于列表尾部长度 + 1

递归计算列表长度

1
2
3
4
defmodule Demo do
def len([]), do: 0
def len([_head | tail]), do: len(tail) + 1
end
1
2
iex> Demo.len [1,2,3,4,5]
5

head变量没有被用到,可以使用_开头的变量名来消除编译警告(_head)。

阅读全文 »

Elixir-模块与命名函数

发表于 2016-07-06   |   分类于 Elixir   |  

上节接触到了匿名函数,这次了解下命名函数。

Elixir 的命名函数必须写在模块里。

示例

定义模块

1
2
3
4
5
defmodule Demo do
def double(n) do
n * 2
end
end

通常单行使用do:语法,多行使用do…end语法。

命令提示符/终端时候用 iex + 文件
加载模块,iex模式下用 c + 文件

1
2
3
iex> c "E:\\Elixir_workspace\\hello.exs"
iex> Demo.double 5
10

函数的模式匹配

看示例:求 n 的阶乘 (递归)

1
2
3
4
defmodule Demo do
def of(0), do: 1
def of(n), do: n * of(n-1)
end
1
2
iex> Demo.of 5
120

有一点要注意,子句顺序不同会产生不同的结果。Elixir会自上而下依次尝试,执行最先匹配的一项。

所以如果上述 def 位置交换将会行不通;第一个定义总是匹配,而第二个永远不会被调用。

阅读全文 »

Elixir-匿名函数

发表于 2016-06-29   |   分类于 Elixir   |  

Elixir是函数式语言,所以函数式它的一种基本类型。

一般语法

匿名函数用 fn 创建

fn
    parameter-list -> body
    parameter-list -> body ...
end

一个参数列表(圆括号可省略),一个函数体,二者通过 -> 隔开。

1
iex> sum = fn (a, b) -> a + b end

调用的时候

1
2
iex> sum.(1, 2)
3

阅读全文 »

Elixir-基础-内置类型

发表于 2016-06-29   |   分类于 Elixir   |  

Elixir内置类型有:

  • 值类型
    • 任意大小的整数
    • 浮点数
    • 原子
    • 区间
    • 正则表达式
  • 系统类型
    • PID和端口
    • 引用
  • 集合类型
    • 元组
    • 列表
    • 散列表
    • 二进制

Elixir里其实 函数 也是类型。

阅读全文 »

Elixir-模式匹配与不可变性

发表于 2016-06-29   |   分类于 Elixir   |  

模式匹配

赋值并非如你所料

1
2
3
4
iex> a = 1
1
iex> a + 3
4

看下以上代码,很简单吧?
把 1 赋值给 a,然后 a 加上 3 返回 4 。

但是在Elixir里面不是这样,等号更像一种 断言(assertion) ,如果可以找到一种方式让左边等于右边,则执行成功;在Elixir里面可以称之为匹配运算符 match operator,参考如下代码:

1
2
3
4
5
6
iex> a = 1
1
iex> 1 = a
1
iex> 2 = a
** (MatchError) no match of right hand side vlaue: 1

阅读全文 »

学一门未来的语言Elixir

发表于 2016-06-25   |   分类于 Elixir   |  

“不要咖啡,不要大象,不要蟒蛇,不要红宝石,只要万金油。”

Elixir

Elixir,美式发音是[ɪˈlɪksɚ],翻译过来炼金药,长生不老药,万金油这个名字不错,我喜欢。

是什么?

一种函数式编程语言,运行在工业级、高性能、分数式的Erlang虚拟机上。Elixir继承了Erlang在构建分布式系统上优点,并且通过添加众多现代化的编程语言的特性来提升语言表达能力。与Java等面向对象的编程语言不同,Elixir是面向并发的编程语言。

下载安装

Installer Download

阅读全文 »

MarkdownPad工具写GitHub博客

发表于 2016-06-23   |   分类于 初写博客   |  

用markdown写博客纯文本编辑也不是很方便,可以利用MarkdownPad进行可视化编辑。

版本下载

Markdownpad2 download
直接官网下载免费版本。

MarkdownPad 2
阅读全文 »

用markdown的语法写博客

发表于 2016-06-19   |   分类于 初写博客   |  

Markdown语法和Next主题写博客

文本居中

此标签将生成一个带上下分割线的引用,同时引用内文本将自动居中。 文本居中时,多行文本若长度不等,视觉上会显得不对称,因此建议在引用单行文本的场景下使用。

例如作为文章开篇引用 或者 结束语之前的总结引用。


1
2
3
4
5
6
7
8
9
10
<!-- HTML方式: 直接在 Markdown 文件中编写 HTML 来调用 -->
<!-- 其中 class="blockquote-center" 是必须的 -->
<blockquote class="blockquote-center">blah blah blah</blockquote>

<!-- 标签 方式,要求版本在0.4.5或以上 -->
{% centerquote %}blah blah blah{% endcenterquote %}

<!-- 标签别名 -->
{% cq %} blah blah blah {% endcq %}
`

阅读全文 »

Hello World

发表于 2016-06-19   |  

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

阅读全文 »
Nurture Passes Nature.

Nurture Passes Nature.

Artoo

10 日志
2 分类
2 标签
RSS
GitHub
  • HUSD
© 2016 Nurture Passes Nature.
based on Hexo , edited by artoo.
theme - NexT.Pisces