Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

Elixir紹介

社内SICP読書会LT大会資料

  • Soyez le premier à commenter

Elixir紹介

  1. 1. Elixir紹介 2014/05/08 SICP Club LT Livesense Inc. HORINOUCHI Masato
  2. 2. Elixirとは Elixir is a func-onal, meta-programming aware language built on top of the Erlang VM. It is a dynamic language that focuses on tooling to leverage Erlang's abili-es to build concurrent, distributed and fault-tolerant applica-ons with hot code upgrades.
  3. 3. 見た目は Ruby 中身は Lisp
  4. 4. 特徴 • 近代的なシンタックス • 全てが式 • 強力なメタプログラミング機能 • 第一級オブジェクトとしてのドキュメント • Erlangランタイムとの相互運用
  5. 5. Fibonacci (Ruby) class Fib def self.fib n case n when 0 then 0 when 1 then 1 else fib(n - 1) + fib(n - 2) end end end puts Fib.fib 10
  6. 6. Fibonacci (Elixir) defmodule Fib do def fib(0), do: 1 def fib(1), do: 1 def fib(n), do: fib(n-1) + fib(n-2) end IO.puts Fib.fib 6
  7. 7. Install • OS X (homebrew) • $ brew install erlang –devel • $ brew install elixir • Windows • なんか大変らしい • Ubuntu • PPA あるよ
  8. 8. REPL $ iex iex> defmodule Hello do ...> def world do ...> IO.puts "Hello, world" ...> end ...> end iex> Hello.world Hello, world :ok iex>
  9. 9. 無名関数 iex> f = fn(x) -> x * 2 end iex> f.(4) 8 iex> (fn(x) -> x * 3 end).(3) 9
  10. 10. map reduce iex> Enum.map( ...> [1,2,3], ...> fn(x) -> x * 2 end) [2, 4, 6] iex> Enum.reduce( ...> [1,2,3], ...> fn(x, acc) -> x + acc end) 6
  11. 11. キーワード引数と括弧の省略 iex> if true do ...> 1 ...> else ...> 2 ...> end 1 iex> if true, do: 1, else: 2 1 iex> if true, [do: 1, else: 2] 1 iex> if(true, [do: 1, else: 2]) 1
  12. 12. Homoiconicity In a homoiconic language the primary representa3on of programs is also a data structure in a primi3ve type of the language itself. This makes metaprogramming easier than in a language without this property, since code can be treated as data: reflec3on in the language (examining the program's en33es at run3me) depends on a single, homogeneous structure, and it does not have to handle several different structures that would appear in a complex syntax. To put that another way, homoiconicity is where a program's source code is wriDen as a basic data structure that the programming language knows how to access.
  13. 13. quote iex> length [1,2,3] 3 iex> quote do: length [1,2,3] {:length, [context: Elixir, import: Kernel], [[1, 2, 3]]} iex> 1 + 2 3 iex> quote do: 1 + 2 {:+, [context: Elixir, import: Kernel], [1, 2]}
  14. 14. macro iex> defmodule MyUnless do ...> defmacro unless(clause, options) do ...> quote do: if !unquote(clause), ...> unquote(options) ...> end ...> end iex> require MyUnless nil Iex> MyUnless.unless true, do: 1, else: 2 2
  15. 15. defmacro if defmacro if(condition, clauses) do do_clause = Keyword.get(clauses, :do, nil) else_clause = Keyword.get(clauses, :else, nil) quote do case unquote(condition) do _ in [false, nil] -> unquote(else_clause) _ -> unquote(do_clause) end end end
  16. 16. if すらもマクロ
  17. 17. ご清聴ありがとうございました

    Soyez le premier à commenter

    Identifiez-vous pour voir les commentaires

  • piacere_ex

    Nov. 2, 2017

社内SICP読書会LT大会資料

Vues

Nombre de vues

590

Sur Slideshare

0

À partir des intégrations

0

Nombre d'intégrations

25

Actions

Téléchargements

3

Partages

0

Commentaires

0

Mentions J'aime

1

×