Enviar pesquisa
Carregar
)の品格
•
0 gostou
•
746 visualizações
E
emasaka
Seguir
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 38
Baixar agora
Baixar para ler offline
Recomendados
Rubyで連結リスト使うためのgemを作った(tsukuba.rb版)
Rubyで連結リスト使うためのgemを作った(tsukuba.rb版)
Sho Hosoda
OCamlでJavaScriptが幸せ
OCamlでJavaScriptが幸せ
Sachirou Inoue
入門機械学習読書会二回目
入門機械学習読書会二回目
Kazufumi Ohkawa
201805 のの会@関数Talk 2nd
201805 のの会@関数Talk 2nd
Satoru Abe
20130216 小ネタ集
20130216 小ネタ集
Hidetoshi Mori
slackに箇条書きにしたタスクを、Notionに登録してくれるbotを作った話
slackに箇条書きにしたタスクを、Notionに登録してくれるbotを作った話
ssuserfb543d1
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
Ransui Iso
メタプログラミングとRuby
メタプログラミングとRuby
Kurume Institute of Technology
Mais conteúdo relacionado
Destaque
メタメタプログラミングRuby
メタメタプログラミングRuby
emasaka
Rubyの黒魔術
Rubyの黒魔術
Masahiro Tomita
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
MATLABモデルご提供開始
MATLABモデルご提供開始
Tsuyoshi Horigome
TREE dynamics Program slide ver.1.0
TREE dynamics Program slide ver.1.0
Toyoki Hashimoto
skiplist&overlay-111030
skiplist&overlay-111030
Mikio Yoshida
挿入ソート
挿入ソート
s5yata
論文紹介:The wavelet matrix
論文紹介:The wavelet matrix
Yuki Igarashi
Wavelet matrix implementation
Wavelet matrix implementation
MITSUNARI Shigeo
木をめぐる混乱について
木をめぐる混乱について
Ryuichi Tanabe
Hash Tree
Hash Tree
Masato HORINOUCHI
Nazoki
Nazoki
Ken Ogura
Scalable Partial Least Squares Regression on Grammar-Compressed Data Matrices
Scalable Partial Least Squares Regression on Grammar-Compressed Data Matrices
Yasuo Tabei
.NET Coreとツール類の今
.NET Coreとツール類の今
Yuki Igarashi
「樹木モデルとランダムフォレスト-機械学習による分類・予測-」-データマイニングセミナー
「樹木モデルとランダムフォレスト-機械学習による分類・予測-」-データマイニングセミナー
Koichi Hamada
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
Destaque
(17)
メタメタプログラミングRuby
メタメタプログラミングRuby
Rubyの黒魔術
Rubyの黒魔術
メタプログラミングって何だろう
メタプログラミングって何だろう
MATLABモデルご提供開始
MATLABモデルご提供開始
TREE dynamics Program slide ver.1.0
TREE dynamics Program slide ver.1.0
skiplist&overlay-111030
skiplist&overlay-111030
挿入ソート
挿入ソート
論文紹介:The wavelet matrix
論文紹介:The wavelet matrix
Wavelet matrix implementation
Wavelet matrix implementation
木をめぐる混乱について
木をめぐる混乱について
Hash Tree
Hash Tree
Nazoki
Nazoki
Scalable Partial Least Squares Regression on Grammar-Compressed Data Matrices
Scalable Partial Least Squares Regression on Grammar-Compressed Data Matrices
.NET Coreとツール類の今
.NET Coreとツール類の今
「樹木モデルとランダムフォレスト-機械学習による分類・予測-」-データマイニングセミナー
「樹木モデルとランダムフォレスト-機械学習による分類・予測-」-データマイニングセミナー
Pythonによる黒魔術入門
Pythonによる黒魔術入門
ウェーブレット木の世界
ウェーブレット木の世界
Mais de emasaka
ibus-skkをなんとかすっぺ会議
ibus-skkをなんとかすっぺ会議
emasaka
濁点の話
濁点の話
emasaka
GoBoLinuxを試した
GoBoLinuxを試した
emasaka
さくらのクラウドでh2oのベンチマーク
さくらのクラウドでh2oのベンチマーク
emasaka
みおぽん for CLI
みおぽん for CLI
emasaka
GNU make 4.0に何かいる
GNU make 4.0に何かいる
emasaka
長いの
長いの
emasaka
人力
人力
emasaka
エコなWebサーバー
エコなWebサーバー
emasaka
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
emasaka
Bash on Railsの逆襲
Bash on Railsの逆襲
emasaka
Mais de emasaka
(11)
ibus-skkをなんとかすっぺ会議
ibus-skkをなんとかすっぺ会議
濁点の話
濁点の話
GoBoLinuxを試した
GoBoLinuxを試した
さくらのクラウドでh2oのベンチマーク
さくらのクラウドでh2oのベンチマーク
みおぽん for CLI
みおぽん for CLI
GNU make 4.0に何かいる
GNU make 4.0に何かいる
長いの
長いの
人力
人力
エコなWebサーバー
エコなWebサーバー
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
Bash on Railsの逆襲
Bash on Railsの逆襲
)の品格
1.
) の品格 @emasaka
2.
どう見ても 出オチです 本当にありがとうございました
3.
自己紹介 ● @emasaka ● 本名:高橋正和 ●
駄洒落を検索結果にしてTwitterに流すメソッドの(たぶん)元祖 ● ja.wikipedia.orgで「Locator/Identifier Separation Protocol」の ページを立てた人 ● 代表作:Bash on Rails ● 40代 フリーター ● ブログ 「本を読む」http://emasaka.blog65.fc2.com/
4.
本題
5.
「Lispはカッコが多い」 などと申しまして
6.
(defun fact (n) (if (zerop n) 1 (* n (fact ( n 1))) )) 階乗(factorial)をこんなふうに 書いたりします
7.
これを より厳密に書くと
8.
(defun . (fact . ((n . nil) . ((if . ((zerop . (n . nil)) . (1 . ((* . (n . ((fact . (( . (n . (1 . nil))) . nil)) . nil))) . nil)))) . nil)))) 点対表記(Dotted pair notation)
9.
たしかにカッコが多い! (拍手!)
10.
命令型プログラマーならfor文か 類似のループで問題を解く
11.
(defun fact (n) (let ((i 1) (r 1)) (while (<= i n) (setq r (* r i) i (+ i 1)) ) r )) ループで書くと
12.
(defun . (fact . ((n . nil) . ((let . (((i . (1 . nil)) . ((r . (1 . nil)) . nil)) . ((while . ((<= . (i . (n . nil))) . ((setq . (r . ((* . (r . (i . nil))) . (i . ((+ . (i . (1 . nil))) . nil))))) . nil))) . (r . nil)))) . nil)))) これを点対表記に
13.
これではLispに 拒絶反応を示す人が いてもおかしくない
14.
“Lisp? No!” の恐怖
15.
でも、 Lisperなら
16.
(3 (5 (7) 11)) このS式を見たとき
17.
(3 . ((5 . ((7 . nil) . (11 . nil))) . nil)) これを飛ばして
18.
こうイメージする nil nil nil 3 5 7 11
19.
木構造 (ツリー)
20.
ツリーを巡回する ● 全要素を出力する ● 全要素を合計する ●
特定の要素を探す ● … ※ブログねたの焼き直しです
21.
方法1 ● car方向とcdr方向をそれぞれ再帰的に辿る ● いちばんシンプルな方法
22.
(defun traversetree (tree func) (if (atom tree) (or (null tree) (funcall func tree)) (traversetree (car tree) func) (traversetree (cdr tree) func) )) Emacs Lispで書くと
23.
(defun traversetree (tree func) (mapc #'(lambda (x) (if (atom x) (or (null x) (funcall func x)) (traversetree x func) )) tree )) cdr方向をmapやループにしても car方向は再帰が必要
24.
方法2 ● ループで辿る ● 戻る場所を外部のデータ構造に覚えておく ●
深さ優先ならスタック、幅優先ならキュー
25.
実装は割愛
26.
方法3 ● 再帰も外部データも使わない方法 ● 通ったコンスセルを破壊的に「120度回転」さ せながら進む ●
3方向(car方向、cdr方向、戻り) = 3回120度回転 = 360度回転 = 元に戻る
27.
図解
28.
car cdr こっちに進む
29.
car cdr こっち(元のcar) に進みながら 120度回転 戻ったら次 (新しいcar)
30.
car cdr 戻ったら次 (新しいcar) こっち(元のcar) に進みながら 120度回転
31.
car cdr こっち(元のcar) に進みながら 120度回転
32.
carを辿っていくだけで ツリーを一巡する
33.
,. -‐'''''""¨¨¨ヽ
(.___,,,... -ァァフ| あ…ありのまま 今 起こった事を話すぜ! |i i| }! }} //| |l、{ j} /,,ィ//| 『おれはcarを辿っていたと i|:!ヾ、_ノ/ u {:}//ヘ 思ったらいつのまにかツリーを一周していた』 |リ u' } ,ノ _,!V,ハ | /´fト、_{ル{,ィ'eラ , タ人 な… 何を言ってるのか わからねーと思うが /' ヾ|宀| {´,)⌒`/ |<ヽトiゝ おれも何をされたのかわからなかった… ,゙ / )ヽ iLレ u' | | ヾlトハ〉 |/_/ ハ !ニ⊇ '/:} V:::::ヽ 頭がどうにかなりそうだった… // 二二二7'T'' /u' __ /:::::::/`ヽ /'´r -—一ァ‐゙T´ '"´ /::::/-‐ \ 再帰だとかスタックだとか / // 广¨´ /' /:::::/´ ̄`ヽ ⌒ヽ そんなチャチなもんじゃあ 断じてねえ ノ ' / ノ:::::`ー-、___/:::::// ヽ } _/`丶 /:::::::::::::::::::::::::: ̄`ー-{:::... イ もっと恐ろしいものの片鱗を味わったぜ…
34.
(defun traversetree:spin (cns prev) (let ((next (car cns))) (rplaca cns (cdr cns)) (rplacd cns prev) next )) (defun traversetree (tree func) (let* ((marker "dummy") ; unique object (cns tree) (prev marker) next ) (while (not (eq (setq next (traversetree:spin cns prev) ) marker )) (if (consp next) (setq prev cns cns next) (or (null next) (funcall func next)) (setq prev next) )))) Emacs Lispで書くと
35.
● 元ネタは、20年ぐらい前に雑誌(bit?)の エッセイかなにかでアイデアを見た記憶 ● 詳細はぜんぜん覚えてない ●
ご存知の方、教えてください
36.
● 実践的ではない ● いくら関数型じゃなくても、無駄な破壊的操作はい まどき流行らない?
37.
DEMO
38.
まとめ ● カッコは単なる格好 ● ツリーですた ●
【緩募】元ネタの情報
Baixar agora