Submit Search
Upload
Esm lt threading_macro
•
Download as PPTX, PDF
•
0 likes
•
872 views
工 久納
Follow
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話
Read less
Read more
Technology
Report
Share
Report
Share
1 of 81
Download now
Recommended
問合せ最適化インサイド
問合せ最適化インサイド
Takahiro Itagaki
Chainer の Trainer 解説と NStepLSTM について
Chainer の Trainer 解説と NStepLSTM について
Retrieva inc.
現実世界のJRuby
現実世界のJRuby
Hiroshi Nakamura
現実世界のJRuby(ショートバージョン)
現実世界のJRuby(ショートバージョン)
Hiroshi Nakamura
PostgreSQL:行数推定を読み解く
PostgreSQL:行数推定を読み解く
Hiroya Kabata
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
Satoshi Yamada
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
Miki Shimogai
自然言語処理10本ノックで比較する java と kotlin
自然言語処理10本ノックで比較する java と kotlin
Takumi Kadowaki
Recommended
問合せ最適化インサイド
問合せ最適化インサイド
Takahiro Itagaki
Chainer の Trainer 解説と NStepLSTM について
Chainer の Trainer 解説と NStepLSTM について
Retrieva inc.
現実世界のJRuby
現実世界のJRuby
Hiroshi Nakamura
現実世界のJRuby(ショートバージョン)
現実世界のJRuby(ショートバージョン)
Hiroshi Nakamura
PostgreSQL:行数推定を読み解く
PostgreSQL:行数推定を読み解く
Hiroya Kabata
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
Satoshi Yamada
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
Miki Shimogai
自然言語処理10本ノックで比較する java と kotlin
自然言語処理10本ノックで比較する java と kotlin
Takumi Kadowaki
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
Satoshi Yamada
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
Nagi Teramo
より深く知るオプティマイザとそのチューニング
より深く知るオプティマイザとそのチューニング
Yuto Hayamizu
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
uedayou
20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public
Kazuaki Ishizaki
mxnetで頑張る深層学習
mxnetで頑張る深層学習
Takashi Kitano
第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-
第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-
Yasuyuki Sugai
20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)
Hiromu Shioya
SQLチューニング入門 入門編
SQLチューニング入門 入門編
Miki Shimogai
Cloud computing competition by Hapyrus
Cloud computing competition by Hapyrus
Koichi Fujikawa
広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習
x1 ichi
Rakuten tech conf
Rakuten tech conf
Koichi Fujikawa
20071030
20071030
小野 修司
Cython intro prelerease
Cython intro prelerease
Shiqiao Du
Chainer/CuPy v5 and Future (Japanese)
Chainer/CuPy v5 and Future (Japanese)
Seiya Tokui
PostgreSQL実行計画入門@関西PostgreSQL勉強会
PostgreSQL実行計画入門@関西PostgreSQL勉強会
Satoshi Yamada
2012 ce116 crowbar_snct_shirai
2012 ce116 crowbar_snct_shirai
鈴鹿工業高等専門学校
Introduction to NumPy & SciPy
Introduction to NumPy & SciPy
Shiqiao Du
PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門
Yosuke Onoue
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
Satoshi Yamada
Juliaで並列計算
Juliaで並列計算
Shintaro Fukushima
第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで
Mugen Fujii
More Related Content
What's hot
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
Satoshi Yamada
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
Nagi Teramo
より深く知るオプティマイザとそのチューニング
より深く知るオプティマイザとそのチューニング
Yuto Hayamizu
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
uedayou
20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public
Kazuaki Ishizaki
mxnetで頑張る深層学習
mxnetで頑張る深層学習
Takashi Kitano
第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-
第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-
Yasuyuki Sugai
20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)
Hiromu Shioya
SQLチューニング入門 入門編
SQLチューニング入門 入門編
Miki Shimogai
Cloud computing competition by Hapyrus
Cloud computing competition by Hapyrus
Koichi Fujikawa
広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習
x1 ichi
Rakuten tech conf
Rakuten tech conf
Koichi Fujikawa
20071030
20071030
小野 修司
Cython intro prelerease
Cython intro prelerease
Shiqiao Du
Chainer/CuPy v5 and Future (Japanese)
Chainer/CuPy v5 and Future (Japanese)
Seiya Tokui
PostgreSQL実行計画入門@関西PostgreSQL勉強会
PostgreSQL実行計画入門@関西PostgreSQL勉強会
Satoshi Yamada
2012 ce116 crowbar_snct_shirai
2012 ce116 crowbar_snct_shirai
鈴鹿工業高等専門学校
Introduction to NumPy & SciPy
Introduction to NumPy & SciPy
Shiqiao Du
PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門
Yosuke Onoue
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
Satoshi Yamada
What's hot
(20)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
より深く知るオプティマイザとそのチューニング
より深く知るオプティマイザとそのチューニング
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public
mxnetで頑張る深層学習
mxnetで頑張る深層学習
第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-
第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-
20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)
SQLチューニング入門 入門編
SQLチューニング入門 入門編
Cloud computing competition by Hapyrus
Cloud computing competition by Hapyrus
広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習
Rakuten tech conf
Rakuten tech conf
20071030
20071030
Cython intro prelerease
Cython intro prelerease
Chainer/CuPy v5 and Future (Japanese)
Chainer/CuPy v5 and Future (Japanese)
PostgreSQL実行計画入門@関西PostgreSQL勉強会
PostgreSQL実行計画入門@関西PostgreSQL勉強会
2012 ce116 crowbar_snct_shirai
2012 ce116 crowbar_snct_shirai
Introduction to NumPy & SciPy
Introduction to NumPy & SciPy
PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
Similar to Esm lt threading_macro
Juliaで並列計算
Juliaで並列計算
Shintaro Fukushima
第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで
Mugen Fujii
React Native GUIDE
React Native GUIDE
dcubeio
Azure Machine Learning Services 概要 - 2019年2月版
Azure Machine Learning Services 概要 - 2019年2月版
Daiyu Hatakeyama
第5回勉強会
第5回勉強会
Mugen Fujii
LINQ概要
LINQ概要
ShinichiAoyagi
ジャパネットQB GPars
ジャパネットQB GPars
Takahiro Sugiura
Scala on Hadoop
Scala on Hadoop
Shinji Tanaka
Introduction to OpenCL (Japanese, OpenCLの基礎)
Introduction to OpenCL (Japanese, OpenCLの基礎)
Takahiro Harada
第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016
kyoto university
ATN No.2 Scala事始め
ATN No.2 Scala事始め
AdvancedTechNight
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Satoshi imai
Using PyFoam as library(第25回オープンCAE勉強会@関西)
Using PyFoam as library(第25回オープンCAE勉強会@関西)
TatsuyaKatayama
A Prolog To Java Translator System And Its Application
A Prolog To Java Translator System And Its Application
guestc68147
DTrace for biginners part(2)
DTrace for biginners part(2)
Shoji Haraguchi
MoteMote Compiler Plugin
MoteMote Compiler Plugin
yoshiaki iwanaga
関東第2回r勉強会
関東第2回r勉強会
Paweł Rusin
20170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#8
Kohei KaiGai
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
TanUkkii
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js
Yoshiiro Ueno
Similar to Esm lt threading_macro
(20)
Juliaで並列計算
Juliaで並列計算
第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで
React Native GUIDE
React Native GUIDE
Azure Machine Learning Services 概要 - 2019年2月版
Azure Machine Learning Services 概要 - 2019年2月版
第5回勉強会
第5回勉強会
LINQ概要
LINQ概要
ジャパネットQB GPars
ジャパネットQB GPars
Scala on Hadoop
Scala on Hadoop
Introduction to OpenCL (Japanese, OpenCLの基礎)
Introduction to OpenCL (Japanese, OpenCLの基礎)
第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016
ATN No.2 Scala事始め
ATN No.2 Scala事始め
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Using PyFoam as library(第25回オープンCAE勉強会@関西)
Using PyFoam as library(第25回オープンCAE勉強会@関西)
A Prolog To Java Translator System And Its Application
A Prolog To Java Translator System And Its Application
DTrace for biginners part(2)
DTrace for biginners part(2)
MoteMote Compiler Plugin
MoteMote Compiler Plugin
関東第2回r勉強会
関東第2回r勉強会
20170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#8
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js
Recently uploaded
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
Recently uploaded
(9)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
Esm lt threading_macro
1.
Clojureの スレッディングマクロ っぽいものをRubyで実装してみた話 について esm LT
2.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て 自己紹介 ▸ 久納 工 ▸
2006年入社 ▸ ITサービス事業部
3.
Clojure ▸Clojure (発音は/'klouʒər/[2], クロージャー)はプログラミング言 語であり、LISP系の言語の方言の一つである。関数型プログラ ミングのプログラミングスタイルでのインタラクティブな開発 を支援し、マルチスレッドプログラムの開発を容易化する汎用 言語である。Clojure言語のプログラムはJava仮想マシンと Microsoft
.NET 共通言語ランタイムで動作する。Clojure言語は 「データとしてのプログラムコード」 (英語:「code as data」) という思想で設計されており、洗練されたマクロ機構を持つ。 ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て Wikipediaより
4.
Clojure ▸Clojure (発音は/'klouʒər/[2], クロージャー)はプログラミング言 語であり、LISP系の言語の方言の一つである。関数型プログラ ミングのプログラミングスタイルでのインタラクティブな開発 を支援し、マルチスレッドプログラムの開発を容易化する汎用 言語である。Clojure言語のプログラムはJava仮想マシンと Microsoft
.NET 共通言語ランタイムで動作する。Clojure言語は 「データとしてのプログラムコード」 (英語:「code as data」) という思想で設計されており、洗練されたマクロ機構を持つ。 ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て Wikipediaより
5.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て スレッディングマクロとは ClojureのS式だと (reduce + 100 (map
#(* %1 2) (filter even? [1 2 3 4])))
6.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て スレッディングマクロとは ClojureのS式だと (reduce + 100 (map
#(* %1 2) (filter even? [1 2 3 4]))) こう実行されて
7.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て スレッディングマクロとは ClojureのS式だと (reduce + 100 (map
#(* %1 2) (filter even? [1 2 3 4]))) ;;=> 112 こうなる
8.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て スレッディングマクロとは スレッディングマクロだと (->> [1 2 3
4] (filter even?) (map #(* %1 2)) (reduce + 100))
9.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て スレッディングマクロとは スレッディングマクロだと (->> [1 2 3
4] (filter even?) (map #(* %1 2)) (reduce + 100)) こう実行されて
10.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て スレッディングマクロとは スレッディングマクロだと (->> [1 2 3
4] (filter even?) (map #(* %1 2)) (reduce + 100)) ;;=> 112 こうなる
11.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て スレッディングマクロの利点 スレッディングマクロ (->> [1 2 3
4] (filter even?) (map #(* %1 2)) (reduce + 100)) S式のみ (reduce + 100 (map #(* %1 2) (filter even? [1 2 3 4])))
12.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て スレッディングマクロの利点 スレッディングマクロ (->> [1 2 3
4] (filter even?) (map #(* %1 2)) (reduce + 100)) S式のみ (reduce + 100 (map #(* %1 2) (filter even? [1 2 3 4]))) スレッディングマクロを使うと 評価の時系列順に上から読むことが出来る
13.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て 他にもあるスレッディングマクロの利点 ClojureのS式だと (reduce + 100 (map
#(* %1 2) (filter even? [1 2 3 4])))
14.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て 他にもあるスレッディングマクロの利点 ClojureのS式だと (reduce + 100 ..(map
#(* %1 2) ....(filter even? ......[1 2 3 4]))) インデントはこうなる
15.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て 他にもあるスレッディングマクロの利点 スレッディングマクロだと (->> [1 2 3
4] (filter even?) (map #(* %1 2)) (reduce + 100))
16.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て 他にもあるスレッディングマクロの利点 スレッディングマクロだと (->> ..[1 2 3
4] ..(filter even?) ..(map #(* %1 2)) ..(reduce + 100)) インデントはこうなる
17.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て 他にもあるスレッディングマクロの利点 スレッディングマクロ (->> [1 2 3
4] (filter even?) (map #(* %1 2)) (reduce + 100)) S式のみ (reduce + 100 (map #(* %1 2) (filter even? [1 2 3 4])))
18.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て 他にもあるスレッディングマクロの利点 スレッディングマクロ (->> ..[1 2 3
4] ..(filter even?) ..(map #(* %1 2)) ..(reduce + 100)) S式のみ (reduce + 100 ..(map #(* %1 2) ....(filter even? ......[1 2 3 4]))) コードのインデントが深くならない
19.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て スレッディングマクロの利点 他にも有るけど割愛
20.
Clojureの スレッディングマクロ っぽいものをRubyで実装してみた話 について esm LT
21.
Clojureの スレッディングマクロ っぽいものをRubyで実装してみた話 について esm LT
22.
Clojureの スレッディングマクロ っぽいものをRubyで実装してみた話 について 第二部 esm LT
23.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て Rubyのラムダ式でS式相当の処理を書くと…
24.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て Rubyのラムダ式でS式相当の処理を書くと… -> (collection) {
collection.reduce(100, :+) }. call(-> (collection) { collection.map {|e| e * 2 } }. call(-> (collection) { collection.select(&:even?) }. call([1, 2, 3, 4])))
25.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て Rubyのラムダ式でS式相当の処理を書くと… -> (collection) {
collection.reduce(100, :+) }. call(-> (collection) { collection.map {|e| e * 2 } }. call(-> (collection) { collection.select(&:even?) }. call([1, 2, 3, 4]))) これをスレッディングマクロっぽく 書けるようにする
26.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て 基本のアイディア [ -> (collection) {
collection.select(&:even?) }, -> (collection) { collection.map {|e| e * 2 } }, -> (collection) { collection.reduce(100, :+) } ].reduce([1, 2, 3, 4]) { |acc, proc| proc.call(acc) }
27.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て 基本のアイディア [ -> (collection) {
collection.select(&:even?) }, -> (collection) { collection.map {|e| e * 2 } }, -> (collection) { collection.reduce(100, :+) } ].reduce([1, 2, 3, 4]) { |acc, proc| proc.call(acc) } Procの配列に対して
28.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て 基本のアイディア [ -> (collection) {
collection.select(&:even?) }, -> (collection) { collection.map {|e| e * 2 } }, -> (collection) { collection.reduce(100, :+) } ].reduce([1, 2, 3, 4]) { |acc, proc| proc.call(acc) } Procの配列に対して reduceして、処理結果に順々に適用する
29.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て 基本のアイディア [ -> (collection) {
collection.select(&:even?) }, -> (collection) { collection.map {|e| e * 2 } }, -> (collection) { collection.reduce(100, :+) } ].reduce([1, 2, 3, 4]) { |acc, proc| proc.call(acc) } => 112 Procの配列に対して reduceして、処理結果に順々に適用する
30.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て とりあえずここまで実装してみる def thread_last(*procs) procs[1..-1].reduce(procs.first) {|acc,
proc| proc.call acc } end
31.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て とりあえずここまで実装してみる def thread_last(*procs) procs[1..-1].reduce(procs.first) {|acc,
proc| proc.call acc } end thread_last( [1,2,3,4], -> (collection) { collection.select(&:even?) }, -> (collection) { collection.map {|e| e * 2 } }, -> (collection) { collection.reduce(100, :+) } )
32.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て とりあえずここまで実装してみる def thread_last(*procs) procs[1..-1].reduce(procs.first) {|acc,
proc| proc.call acc } end thread_last( [1,2,3,4], -> (collection) { collection.select(&:even?) }, -> (collection) { collection.map {|e| e * 2 } }, -> (collection) { collection.reduce(100, :+) } ) => 112
33.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て とりあえずここまで実装してみる def thread_last(*procs) procs[1..-1].reduce(procs.first) {|acc,
proc| proc.call acc } end thread_last( [1,2,3,4], -> (collection) { collection.select(&:even?) }, -> (collection) { collection.map {|e| e * 2 } }, -> (collection) { collection.reduce(100, :+) } ) => 112 出来た!
34.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て 基本のアイディア [ -> (collection) {
collection.select(&:even?) }, -> (collection) { collection.map {|e| e * 2 } }, -> (collection) { collection.reduce(100, :+) } ].reduce([1, 2, 3, 4]) { |acc, proc| proc.call(acc) }
35.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て こんなときはどうする? [ -> (collection) {
collection.select(&:even?) }, -> (n, collection) { collection.map {|e| e * n } }, -> (collection) { collection.reduce(100, :+) } ].reduce([1, 2, 3, 4]) { |acc, proc| proc.call(acc) }
36.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て こんなときはどうする? [ -> (collection) {
collection.select(&:even?) }, -> (n, collection) { collection.map {|e| e * n } }, -> (collection) { collection.reduce(100, :+) } ].reduce([1, 2, 3, 4]) { |acc, proc| proc.call(acc) } nを指定したい
37.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て こんなときはどうする? [ -> (collection) {
collection.select(&:even?) }, -> (n, collection) { collection.map {|e| e * n } }, -> (collection) { collection.reduce(100, :+) } ].reduce([1, 2, 3, 4]) { |acc, proc| proc.call(acc) } ArgumentError: wrong number of arguments (given 1, expected 2)
38.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て こんなときはどうする? [ -> (collection) {
collection.select(&:even?) }, -> (n, collection) { collection.map {|e| e * n } }, -> (collection) { collection.reduce(100, :+) } ].reduce([1, 2, 3, 4]) { |acc, proc| proc.call(acc) } ArgumentError: wrong number of arguments (given 1, expected 2) 一つの引数にだけ Procを適用している
39.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て こんなときは [ -> (collection) {
collection.select(&:even?) }, -> (n, collection) { collection.map {|e| e * n } }, -> (collection) { collection.reduce(100, :+) } ].reduce([1, 2, 3, 4]) { |acc, proc| proc.call(acc) }
40.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て こんなときはこうする! [ -> (collection) {
collection.select(&:even?) }, -> (n, collection) { collection.map {|e| e * n } }.curry[2], -> (collection) { collection.reduce(100, :+) } ].reduce([1, 2, 3, 4]) { |acc, proc| proc.call(acc) }
41.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て こんなときはこうする! [ -> (collection) {
collection.select(&:even?) }, -> (n, collection) { collection.map {|e| e * n } }.curry[2], -> (collection) { collection.reduce(100, :+) } ].reduce([1, 2, 3, 4]) { |acc, proc| proc.call(acc) } => 112
42.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て こんなときはこうする! [ -> (collection) {
collection.select(&:even?) }, -> (n, collection) { collection.map {|e| e * n } }.curry[2], -> (collection) { collection.reduce(100, :+) } ].reduce([1, 2, 3, 4]) { |acc, proc| proc.call(acc) } curryとは?
43.
60sec で分かる(と良いなと 思う) カリー化と部分適用
44.
60sec で分かる(と良いなと思う)カリー化と部分適用 カリー化とは 関数がただ一つの引数だけをとるようにすること 。この状態の関数をカリー化されていると呼ぶ。 2引数の関数はカリー化することで、引数の数が 一つである関数と、その関数を返す引数の数が一 つの関数に分けられる。
45.
60sec で分かる(と良いなと思う)カリー化と部分適用 カリー化とは Ruby で書くと… ->(x,
y) { x + y }.call(2, 3) => 5
46.
60sec で分かる(と良いなと思う)カリー化と部分適用 カリー化とは Ruby で書くと… ->(x,
y) { x + y }.call(2, 3) => 5 ->(x) { -> (y) { x + y } }.call(2).call(3) => 5 カリー化(手動)
47.
60sec で分かる(と良いなと思う)カリー化と部分適用 カリー化とは Ruby で書くと… ->(x,
y) { x + y }.call(2, 3) => 5 ->(x, y) { x + y }.curry[2][3] => 5 カリー化
48.
60sec で分かる(と良いなと思う)カリー化と部分適用 カリー化とは Ruby で書くと… ->(x,
y) { x + y }.call(2, 3) ->(x, y) { x + y }.curry[2][3] ``-> (y) { 2 + y }`` 相当のProcが返ってくる カリー化
49.
60sec で分かる(と良いなと思う)カリー化と部分適用 カリー化とは 任意の数の引数のProcをカリー化出来る ->(x, y,
z) { x + y + z }.curry[2][3][4] => 9 ->(x, y, z, xx, yy, zz) { x + y + z + xx + yy + zz }.curry[2][3][4][5][6][7] => 27
50.
60sec で分かる(と良いなと思う)カリー化と部分適用 カリー化とは 途中で変数に取ることも出来る partialized_proc =
->(x, y) { x + y }.curry[2] => #<Proc:0x007feaa2f4c6f0 (lambda)> partialized_proc[3] => 5
51.
60sec で分かる(と良いなと思う)カリー化と部分適用 カリー化とは 途中で変数に取ることも出来る partialized_proc =
->(x, y) { x + y }.curry[2] => #<Proc:0x007feaa2f4c6f0 (lambda)> partialized_proc[3] => 5 全ての引数が渡されると処理結果が返ってくる
52.
60sec で分かる(と良いなと思う)カリー化と部分適用 部分適用とは 部分適用とは、関数に対して全ての引数を一度に 渡さず、一部の引数だけ渡すことができる仕組み 。
53.
60sec で分かる(と良いなと思う)カリー化と部分適用 部分適用とは partialized_proc =
->(x, y) { x + y }.curry[2] => #<Proc:0x007feaa2f4c6f0 (lambda)> partialized_proc[3] => 5
54.
60sec で分かる(と良いなと思う)カリー化と部分適用 部分適用とは partialized_proc =
->(x, y) { x + y }.curry[2] => #<Proc:0x007feaa2f4c6f0 (lambda)> partialized_proc[3] => 5 これが部分適用された状態のProc
55.
60sec で分かる(と良いなと 思う) カリー化と部分適用
56.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て ⚠注意事項
57.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て ⚠注意事項 Clojureではスレッディングマクロの実現に Transducersという機構を使用しています。
58.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て ⚠注意事項 Clojureではスレッディングマクロの実現に Transducersという機構を使用しています。 が、ここではTransducersについては触れません。
59.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て この書き方を [ -> (collection) {
collection.select(&:even?) }, -> (n, collection) { collection.map {|e| e * n } }.curry[2], -> (collection) { collection.reduce(100, :+) } ].reduce([1, 2, 3, 4]) { |acc, proc| proc.call(acc) }
60.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て thread_last に適用すると… thread_last( [1,2,3,4], -> (collection)
{ collection.select(&:even?) }, -> (n, collection) { collection.map {|e| e * n }.curry[2] }, -> (collection) { collection.reduce(100, :+) } )
61.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て thread_last に適用すると… thread_last( [1,2,3,4], -> (collection)
{ collection.select(&:even?) }, -> (n, collection) { collection.map {|e| e * n }.curry[2] }, -> (collection) { collection.reduce(100, :+) } ) => 112
62.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て thread_last に適用すると… thread_last( [1,2,3,4], -> (collection)
{ collection.select(&:even?) }, -> (n, collection) { collection.map {|e| e * n }.curry[2] }, -> (collection) { collection.reduce(100, :+) } ) => 112 利用者がcurryしないといけない
63.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て いちいちcurryしたくない……
64.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て いちいちcurryしたくない…… class Proc def |(arg) self.curry[arg] end end
65.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て いちいちcurryしたくない…… class Proc def |(arg) self.curry[arg] end end Procに
| メソッドを生やす
66.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て いちいちcurryしたくない…… class Proc def |(arg) self.curry[arg] end end thread_last( [1,2,3,4], ->
(collection) { collection.select(&:even?) }, -> (n, collection) { collection.map {|e| e * n } } | 2, -> (collection) { collection.reduce(100, :+) } ) Procに | メソッドを生やす
67.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て いちいちcurryしたくない…… class Proc def |(arg) self.curry[arg] end end thread_last( [1,2,3,4], ->
(collection) { collection.select(&:even?) }, -> (n, collection) { collection.map {|e| e * n } } | 2, -> (collection) { collection.reduce(100, :+) } ) => 112 Procに | メソッドを生やす
68.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て thread_last(->>) が出来た!
69.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て thread_last(->>) が出来た!
70.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て 色々なスレッディングマクロ ‣ -> ‣ ->> ‣
as-> ‣ some-> ‣ some->> ‣ cond-> ‣ cond->>
71.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て 色々なスレッディングマクロ ‣ -> ‣ ->> ‣
as-> ‣ some-> ‣ some->> ‣ cond-> ‣ cond->> まだまだ戦いは続く……
72.
▸一番最初の値にProcが来ることもある。ので、最初がProcならば実行する。もちろん引数の数が不定なのでcallで はなくcurryで。 ▸Procに生やした|メソッドで即時curryしていたけど、thread_first(->) のときは実行する寸前までカリー化したくな いので、実行時まで配列で持っているようにした。 ▸thread_as(as->) するときは引数の挿入場所を選べる。シンボルで表現したいがProcの結果がシンボルになること も有るので、表現しきれない。のでProcに新たなメソッド&を生やした。かつ、挿入位置を表す型を用意した。 ▸map
とかreduceとかするラムダ式を一々書きたくない……ので、引数で受け取ったCollectionをレシーバーとして mapを実行するメソッド_map(proc)がincludeしたクラスのselfに生えるようにした。reduce, selectに関しても同 様。 ▸↑で作ったメソッドで、Procを渡したいときとBlockを渡したいときがある。 ▸Clojureの->>と同じようなメソッドのエイリアスを設けたいが、- 始まりのメソッドは書けない。マルチバイトは いけるので、色々考えた結果これが一番近いと思う。 ``ー✈✈`` ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て 戦いの記録(ダイジェスト版)
73.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て 色々やった結果 -> (collection) {
collection.reduce(100, :+) }. call(-> (collection) { collection.map {|e| e * 2 } }. call(-> (collection) { collection.select(&:even?) }. call([1, 2, 3, 4])))
74.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て 色々やった結果 -> (collection) {
collection.reduce(100, :+) }. call(-> (collection) { collection.map {|e| e * 2 } }. call(-> (collection) { collection.select(&:even?) }. call([1, 2, 3, 4]))) thread_last( [1, 2, 3, 4], _select(&:even?), _map(-> (e) { e * 2 }), _reduce(100, &:+) )
75.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て 色々やった結果 -> (collection) {
collection.reduce(100, :+) }. call(-> (collection) { collection.map {|e| e * 2 } }. call(-> (collection) { collection.select(&:even?) }. call([1, 2, 3, 4]))) thread_last( [1, 2, 3, 4], _select(&:even?), _map(-> (e) { e * 2 }), _reduce(100, &:+) )
76.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て なお…… thread_last( [1, 2, 3,
4], _select(&:even?), _map(-> (e) { e * 2 }), _reduce(100, &:+) )
77.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て なお…… thread_last( [1, 2, 3,
4], _select(&:even?), _map(-> (e) { e * 2 }), _reduce(100, &:+) ) このコードをラムダ式を使わずに 普通に書くと……
78.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て なお…… [1, 2, 3,
4]. select(&:even?). map {|e| e * 2}. reduce(100, :+) thread_last( [1, 2, 3, 4], _select(&:even?), _map(-> (e) { e * 2 }), _reduce(100, &:+) ) このコードをラムダ式を使わずに 普通に書くと……
79.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て 結論。
80.
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい て 結論。 素のRubyすごい
81.
Clojureの スレッディングマクロ っぽいものをRubyで実装してみた話 について 第二部 esm LT
Download now