SlideShare a Scribd company logo
1 of 55
Download to read offline
Clojurian ElixirClojurian Elixir
lagénorhynquelagénorhynque
(defprofile lagénorhynque
:id @lagenorhynque
:reading "/laʒenɔʁɛ̃k/"
:aliases [" "]
:languages [Clojure Haskell English français]
:interests [programming language-learning law mathematics]
:commits ["github.com/lagenorhynque/duct.module.pedestal"]
:contributes ["github.com/japan-clojurians/clojure-site-ja"])
6 Lisp6 Lisp (*> ᴗ •*)(*> ᴗ •*)
Clojure : REST API
cf. BOOTH https://booth.pm/ja/items/1317263
1. Clojure Elixir
2. Elixir
3. Clojure
4. Clojure
Clojure ElixirClojure Elixir
ClojureClojure
:
: 2007
:
:
Java VM (JVM)
Lisp /
Rich Hickey
1.10.0
ElixirElixir
:
: 2011
:
:
Erlang VM (EVM; BEAM)
Ruby
Clojure
José Valim
1.8.2
e.g. 20e.g. 20
ClojureClojure
;; REPL (read-eval-print loop)
user> (->> (iterate (fn [[a b]] [b (+ a b)]) [0 1])
(map first)
(take 20))
(0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181)
ElixirElixir
# IEx (Interactive Elixir)
iex(1)> Stream.iterate({0, 1}, fn {a, b} -> {b, a+b} end) |>
...(1)> Stream.map(&elem(&1, 0)) |>
...(1)> Enum.take(20)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610,
987, 1597, 2584, 4181]
#
iex(2)> Stream.unfold({0, 1}, fn {a, b} -> {a, {b, a+b}} end) |>
...(2)> Enum.take(20)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610,
987, 1597, 2584, 4181]
ElixirElixir
à la Clojure?
Clojure 2Clojure 2
cf. :cf. : Programming Clojure, Third EditionProgramming Clojure, Third Edition
ElixirElixir
cf. :cf. : Programming Elixir ≥ 1.6Programming Elixir ≥ 1.6
Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell
7 77 7
Lua, Factor, Elixir, Elm, Julia, MiniKanren, Idris
Seven More Languages in Seven WeeksSeven More Languages in Seven Weeks
Chapter 3, 4, 6: Clojure
Chapter 5: Elixir
Seven Concurrency Models in Seven WeeksSeven Concurrency Models in Seven Weeks
Mastering Clojure MacrosMastering Clojure Macros
Metaprogramming ElixirMetaprogramming Elixir
Elixir Erlang/OTPElixir Erlang/OTP
ElixirElixir
ElixirElixir
ElixirElixir
ElixirElixir Getting StartedGetting Started
Erlang/Elixir Syntax: A Crash CourseErlang/Elixir Syntax: A Crash Course
ClojureClojure
ClojureClojure
ElixirElixir
cf. (Clojure )
user> '(1 2 3) ; ※
(1 2 3)
user> [1 2 3] ;
[1 2 3]
user> {:a 1 :b 2 :c 3} ;
{:a 1, :b 2, :c 3}
iex(2)> [1, 2, 3] #
[1, 2, 3]
iex(3)> {1, 2, 3} #
{1, 2, 3}
iex(4)> %{a: 1, b: 2, c: 3} #
%{a: 1, b: 2, c: 3}
//
ClojureClojure
ElixirElixir
user> (ns example) ; `example`
nil
example> (defn square [x] ; `square`
(* x x))
#'example/square
example> (in-ns 'user) ; `user`
#namespace[user]
user>
iex(5)> defmodule Example do # `Example`
...(5)> def square(x) do # `square`
...(5)> x * x
...(5)> end
...(5)> end
{:module, Example,
<<70, 79, 82, 49, 0, 0, 4, 100, 66, 69, 65, 77, 65, 116, 85, 56,
0, 0, 0, 14, 14, 69, 108, 105, 120, 105, 114, 46, 69, 120, 97,
101, 8, 95, 95, 105, 110, 102, 111, 95, ...>>, {:square, 1}}
ClojureClojure
ElixirElixir
user> (example/square 3) ; `example` `square`
9
user> (map example/square (range 1 (inc 10)))
(1 4 9 16 25 36 49 64 81 100)
iex(6)> Example.square(3) # `Example` `square`
9
iex(7)> Enum.map(1..10, &Example.square/1)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
//
ClojureClojure
ElixirElixir
user> (map (fn [x] (* x x)) (range 1 (inc 10)))
(1 4 9 16 25 36 49 64 81 100)
user> (map #(* % %) (range 1 (inc 10)))
(1 4 9 16 25 36 49 64 81 100)
iex(8)> Enum.map(1..10, fn(x) -> x * x end)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
iex(8)> Enum.map(1..10, &(&1 * &1))
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
­>>­>> (threading macro) vs(threading macro) vs |>|> (pipe operator)(pipe operator)
ClojureClojure
ElixirElixir
cf.
user> (->> (range 1 (inc 10))
(map #(* % %))
(filter odd?)
(apply +))
165
iex(9)> require Integer
Integer
iex(10)> 1..10 |>
...(10)> Enum.map(&(&1 * &1)) |>
...(10)> Enum.filter(&Integer.is_odd/1) |>
...(10)> Enum.sum
165
ClojureClojure
ElixirElixir
user> (defprotocol Shape ; `Shape`
(area [x])) ; `area`
Shape
iex(1)> defprotocol Shape do # `Shape`
...(1)> def area(x) # `area`
...(1)> end
{:module, Shape, ..., {:__protocol__, 1}}
//
ClojureClojure
user> (defrecord Triangle [x h] ; `Triangle`
Shape ;
(area [{:keys [x h]}] (/ (* x h) 2)))
user.Triangle
user> (area (map->Triangle {:x 3 :h 2}))
3
user> (defrecord Rectangle [x y] ; `Rectangle`
Shape ;
(area [{:keys [x y]}] (* x y)))
user.Rectangle
user> (area (map->Rectangle {:x 2 :y 3}))
6
ElixirElixir
iex(2)> defmodule Triangle do # `Triangle`
...(2)> defstruct [:x, :h]
...(2)> end
{:module, Triangle, ..., %Triangle{h: nil, x: nil}}
iex(3)> defimpl Shape, for: Triangle do #
...(3)> def area(%Triangle{x: x, h: h}), do: x * h / 2
...(3)> end
{:module, Shape.Triangle, ..., {:__impl__, 1}}
iex(4)> Shape.area(%Triangle{x: 3, h: 2})
3.0
iex(5)> defmodule Rectangle do # `Rectangle`
...(5)> defstruct [:x, :y]
...(5)> end
{:module, Rectangle, ..., %Rectangle{x: nil, y: nil}}
iex(6)> defimpl Shape, for: Rectangle do #
...(6)> def area(%Rectangle{x: x, y: y}), do: x * y
...(6)> end
{:module, Shape.Rectangle, ..., {:__impl__, 1}}
iex(7)> Shape.area(%Rectangle{x: 2, y: 3})
6
ClojureClojure
ElixirElixir
user> (defrecord Circle [r]) ; `Circle`
user.Circle
user> (area (map->Circle {:r 3}))
Execution error (IllegalArgumentException) at user/eval5412$fn$G
(REPL:47).
No implementation of method: :area of protocol: #'user/Shape fou
nd for class: user.Circle
iex(8)> defmodule Circle do # `Circle`
...(8)> defstruct [:r]
...(8)> end
{:module, Circle, ..., %Circle{r: nil}}
iex(9)> Shape.area(%Circle{r: 3})
** (Protocol.UndefinedError) protocol Shape not implemented for
%Circle{r: 3}
iex:2: Shape.impl_for!/1
iex:3: Shape.area/1
ClojureClojure
ElixirElixir
user> (extend-protocol Shape ;
Circle
(area [{:keys [r]}] (* Math/PI r r)))
nil
user> (area (map->Circle {:r 3}))
28.274333882308138
iex(10)> defimpl Shape, for: Circle do #
...(10)> def area(%Circle{r: r}), do: :math.pi() * r * r
...(10)> end
{:module, Shape.Circle, ..., {:__impl__, 1}}
iex(11)> Shape.area(%Circle{r: 3})
28.274333882308138
ASTAST
ClojureClojure
user> '(when (= 1 1)
(println "Truthy!"))
(when (= 1 1) (println "Truthy!"))
;;
user> (quote
(when (= 1 1)
(println "Truthy!")))
(when (= 1 1) (println "Truthy!"))
ElixirElixir
iex(1)> quote do
...(1)> if 1 == 1 do
...(1)> IO.puts "Truthy!"
...(1)> end
...(1)> end
{:if, [context: Elixir, import: Kernel],
[
{:==, [context: Elixir, import: Kernel], [1, 1]},
[
do: {{:., [], [{:__aliases__, [alias: false], [:IO]}, :puts
]}, [],
["Truthy!"]}
]
]}
ClojureClojure
user> (ns example)
nil
example> (defmacro my-when-not [test & body]
`(if ~test
nil
(do ~@body)))
#'example/my-when-not
example> (in-ns 'user)
#namespace[user]
user>
ElixirElixir
iex(2)> defmodule Example do
...(2)> defmacro my_unless(test, do: body) do
...(2)> quote do
...(2)> if unquote(test), do: nil, else: unquote(body)
...(2)> end
...(2)> end
...(2)> end
{:module, Example, ..., {:my_unless, 2}}
ClojureClojure
user> (example/my-when-not (= 1 2)
(println "Falsy!")
42)
Falsy!
42
user> (example/my-when-not (= 1 1)
(println "Falsy!")
42)
nil
ElixirElixir
iex(3)> require Example
Example
iex(4)> Example.my_unless 1 == 2 do
...(4)> IO.puts "Falsy!"
...(4)> 42
...(4)> end
Falsy!
42
iex(5)> Example.my_unless 1 == 1 do
...(5)> IO.puts "Falsy!"
...(5)> 42
...(5)> end
nil
ClojureClojure
user> (macroexpand-1 ; 1
'(example/my-when-not (= 1 2)
(println "Falsy!")
42))
(if (= 1 2) nil (do (println "Falsy!") 42))
ElixirElixir
iex(6)> quote do
...(6)> Example.my_unless 1 == 2 do
...(6)> IO.puts "Falsy!"
...(6)> 42
...(6)> end
...(6)> end |> Macro.expand_once(__ENV__) |> # 1
...(6)> Macro.to_string |> IO.puts # AST
if(1 == 2) do
nil
else
IO.puts("Falsy!")
42
end
:ok
ClojureClojure
vs
cf. (by Rich Hickey)
REPL
cf. REPL (REPL-driven development)
Simple Made Easy
Elixirists Clojurians (?)Elixirists Clojurians (?)
Further ReadingFurther Reading
:
:
https://clojure.org
https://japan-
clojurians.github.io/clojure-site-ja/
https://elixir-lang.org
https://elixir-lang.jp
Getting Started
Erlang/Elixir Syntax: A Crash Course
:
:
Clojure 2
Programming Clojure, Third Edition
Elixir
Programming Elixir ≥ 1.6
7 7
Seven More Languages in Seven Weeks
Seven Concurrency Models in Seven Weeks
Scala/Akka (Chapter 5)
Mastering Clojure Macros
Metaprogramming Elixir
Elixir Erlang/OTP
Elixir
Elixir
Elixir
:
https://scrapbox.io/lagenorhynque/Elixir
lagenorhynque/programming-elixir

More Related Content

What's hot

20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
 

What's hot (20)

関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml
 
Laravel の paginate は一体何をやっているのか
Laravel の paginate は一体何をやっているのかLaravel の paginate は一体何をやっているのか
Laravel の paginate は一体何をやっているのか
 
C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
 
Add an interactive command line to your C++ application
Add an interactive command line to your C++ applicationAdd an interactive command line to your C++ application
Add an interactive command line to your C++ application
 
Clojureの世界と実際のWeb開発
Clojureの世界と実際のWeb開発Clojureの世界と実際のWeb開発
Clojureの世界と実際のWeb開発
 
PHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyieldPHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyield
 
UnicodeによるXSSと SQLインジェクションの可能性
UnicodeによるXSSとSQLインジェクションの可能性UnicodeによるXSSとSQLインジェクションの可能性
UnicodeによるXSSと SQLインジェクションの可能性
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたOPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
 
コードで学ぶドメイン駆動設計入門
コードで学ぶドメイン駆動設計入門コードで学ぶドメイン駆動設計入門
コードで学ぶドメイン駆動設計入門
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ
 
Visual C++で使えるC++11
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11
 
コルーチンの使い方
コルーチンの使い方コルーチンの使い方
コルーチンの使い方
 
Asynchronous JS in Odoo
Asynchronous JS in OdooAsynchronous JS in Odoo
Asynchronous JS in Odoo
 
Ruby でつくる型付き Ruby
Ruby でつくる型付き RubyRuby でつくる型付き Ruby
Ruby でつくる型付き Ruby
 
Kotlin vs TypeScript
Kotlin vs TypeScriptKotlin vs TypeScript
Kotlin vs TypeScript
 
ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介
 
php-src の歩き方
php-src の歩き方php-src の歩き方
php-src の歩き方
 

Similar to ClojurianからみたElixir

ECMAScript2015
ECMAScript2015ECMAScript2015
ECMAScript2015
qmmr
 
Patterns 200711
Patterns 200711Patterns 200711
Patterns 200711
ClarkTony
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
Dmitry Buzdin
 

Similar to ClojurianからみたElixir (20)

Elixir @ Paris.rb
Elixir @ Paris.rbElixir @ Paris.rb
Elixir @ Paris.rb
 
ClojureScript: The Good Parts
ClojureScript: The Good PartsClojureScript: The Good Parts
ClojureScript: The Good Parts
 
ClojureScript loves React, DomCode May 26 2015
ClojureScript loves React, DomCode May 26 2015ClojureScript loves React, DomCode May 26 2015
ClojureScript loves React, DomCode May 26 2015
 
Introduction to Elixir
Introduction to ElixirIntroduction to Elixir
Introduction to Elixir
 
Clojure Intro
Clojure IntroClojure Intro
Clojure Intro
 
From Java To Clojure (English version)
From Java To Clojure (English version)From Java To Clojure (English version)
From Java To Clojure (English version)
 
Pivorak Clojure by Dmytro Bignyak
Pivorak Clojure by Dmytro BignyakPivorak Clojure by Dmytro Bignyak
Pivorak Clojure by Dmytro Bignyak
 
ECMAScript2015
ECMAScript2015ECMAScript2015
ECMAScript2015
 
Introducción a Elixir
Introducción a ElixirIntroducción a Elixir
Introducción a Elixir
 
Pune Clojure Course Outline
Pune Clojure Course OutlinePune Clojure Course Outline
Pune Clojure Course Outline
 
PythonOOP
PythonOOPPythonOOP
PythonOOP
 
What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)
 
Elixir and OTP Apps introduction
Elixir and OTP Apps introductionElixir and OTP Apps introduction
Elixir and OTP Apps introduction
 
ClojureScript for the web
ClojureScript for the webClojureScript for the web
ClojureScript for the web
 
Exploring Clojurescript
Exploring ClojurescriptExploring Clojurescript
Exploring Clojurescript
 
Patterns 200711
Patterns 200711Patterns 200711
Patterns 200711
 
Coscup2021-rust-toturial
Coscup2021-rust-toturialCoscup2021-rust-toturial
Coscup2021-rust-toturial
 
Javascript Basics
Javascript BasicsJavascript Basics
Javascript Basics
 
Clojure 1.1 And Beyond
Clojure 1.1 And BeyondClojure 1.1 And Beyond
Clojure 1.1 And Beyond
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
 

More from Kent Ohashi

More from Kent Ohashi (20)

インターフェース定義言語から学ぶモダンなWeb API方式: REST, GraphQL, gRPC
インターフェース定義言語から学ぶモダンなWeb API方式: REST, GraphQL, gRPCインターフェース定義言語から学ぶモダンなWeb API方式: REST, GraphQL, gRPC
インターフェース定義言語から学ぶモダンなWeb API方式: REST, GraphQL, gRPC
 
Team Geek Revisited
Team Geek RevisitedTeam Geek Revisited
Team Geek Revisited
 
Scala vs Clojure?: The Rise and Fall of Functional Languages in Opt Technologies
Scala vs Clojure?: The Rise and Fall of Functional Languages in Opt TechnologiesScala vs Clojure?: The Rise and Fall of Functional Languages in Opt Technologies
Scala vs Clojure?: The Rise and Fall of Functional Languages in Opt Technologies
 
Clojureコレクションで探るimmutableでpersistentな世界
Clojureコレクションで探るimmutableでpersistentな世界Clojureコレクションで探るimmutableでpersistentな世界
Clojureコレクションで探るimmutableでpersistentな世界
 
英語学習者のためのフランス語文法入門: フランス語完全理解(?)
英語学習者のためのフランス語文法入門: フランス語完全理解(?)英語学習者のためのフランス語文法入門: フランス語完全理解(?)
英語学習者のためのフランス語文法入門: フランス語完全理解(?)
 
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミングJavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
 
実用のための語源学入門
実用のための語源学入門実用のための語源学入門
実用のための語源学入門
 
メタプログラミング入門
メタプログラミング入門メタプログラミング入門
メタプログラミング入門
 
労働法の世界
労働法の世界労働法の世界
労働法の世界
 
Clojureで作る"simple"なDSL
Clojureで作る"simple"なDSLClojureで作る"simple"なDSL
Clojureで作る"simple"なDSL
 
RDBでのツリー表現入門
RDBでのツリー表現入門RDBでのツリー表現入門
RDBでのツリー表現入門
 
GraphQL入門
GraphQL入門GraphQL入門
GraphQL入門
 
Everyday Life with clojure.spec
Everyday Life with clojure.specEveryday Life with clojure.spec
Everyday Life with clojure.spec
 
たのしい多言語学習
たのしい多言語学習たのしい多言語学習
たのしい多言語学習
 
Ductモジュール入門
Ductモジュール入門Ductモジュール入門
Ductモジュール入門
 
Clojure REPL: The Good Parts
Clojure REPL: The Good PartsClojure REPL: The Good Parts
Clojure REPL: The Good Parts
 
"Simple Made Easy" Made Easy
"Simple Made Easy" Made Easy"Simple Made Easy" Made Easy
"Simple Made Easy" Made Easy
 
Clojurian Conquest
Clojurian ConquestClojurian Conquest
Clojurian Conquest
 
GraphQL API in Clojure
GraphQL API in ClojureGraphQL API in Clojure
GraphQL API in Clojure
 
法学入門
法学入門法学入門
法学入門
 

Recently uploaded

%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
masabamasaba
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
masabamasaba
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
masabamasaba
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 

Recently uploaded (20)

%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
SHRMPro HRMS Software Solutions Presentation
SHRMPro HRMS Software Solutions PresentationSHRMPro HRMS Software Solutions Presentation
SHRMPro HRMS Software Solutions Presentation
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Generic or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisionsGeneric or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisions
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 

ClojurianからみたElixir