際際滷

際際滷Share a Scribd company logo
One
Common Lispでもワンライナ`したい
徭失B初
¢ twitter: sin_clav
¢ github: t-sin
¢ 勸伏のCommon Lisp聞い
¢ おしごとはnil
書晩おしすること
¢ Common Lispでワンライナ`
やったらツラかったC
¢ ワンライナ`をSにしてやるぜ┰Y惚
¢ どうワンライナ`するのか聞い圭
¢ その坪何夛O?g廾
シェルのワンライナ`
よくお弊になりますよね
よくやるワンライナ`(1)
¢ アクセスログ嶄のhoge APIへのアクセス
¢ そのログ嶄のhoge APIのアクセス方
$ cat /var/log/nginx/access.log | grep /api/hoge
xx.xx.xx.xx - - [21/Oct/´] "GET / HTTP/1.1" ´.
xx.xx.xx.xx - - [22/Oct/´] "GET / HTTP/1.1" ´.
xx.xx.xx.xx - - [24/Oct/´] "GET / HTTP/1.1" ´.
$ cat /var/log/nginx/access.log | grep /api/hoge |
wc -l
¢ 3
よくやるワンライナ`(2)
¢ CSVファイル嶄の2双朕の栽
$ cat data.csv
id1,1
id2,2
id3,3
$ cat data.csv | awk -F , '{sum+=$2}END{print sum}'
6
よくやるワンライナ`(2)
¢ CSVファイル嶄の2双朕の栽
shell參翌の冱Z(awk)おぼえないとダメ´
$ cat data.csv
id1,1
id2,2
id3,3
$ cat data.csv | awk -F , '{sum+=$2}END{print sum}'
6
Common Lispでやってみる
¢ CSVファイル嶄の2双朕の栽
¢ ぜんぶCommon Lispで。
$ cut -d ',' -f 2 data.csv | ros run -e '(print
(loop for line = (read *standard-input* nil :eof)
until (eq :eof line) sum line))' -q
6
$ ros -s split-sequence -e '(with-open-file (in
"data.csv") (print (loop for l = (read-line in
nil :eof) until (eq l :eof) sum (parse-integer (nth
1 (split-sequence:split-sequence #, l))))))' -q
¢ 6
ながすぎてしぬ
われわれはどうすればいいのだ´´
ワンライナ`っぽさのために
¢ 秘薦まわりのタイプ方をpらす
C *standard-input*
C with-open-fileうんぬん
C 佩にしてのloop
¢ 仝I尖々の栽撹っぽくけるとよい
ワンライナ`を屶址するワン
¢ CSVの2双朕栽をoneで。
¢ ぜんぶoneで。
$ cut -d ',' -f 2 data.csv | ros one '(one:for* - <
one:read* +> + 0)'
6
$ ros one '(one:for* #P"data.csv" < one:read-line*
$ #/(split-sequence #, _) $ #/(nth 1 _) $ parse-
integer +> + 0)'
6
Oneとは
仝I尖々を
BYして
秘薦をwrapする
ライブラリです。
OneのC嬬古勣
ゆるいお欒屬舛任ききください
Oneの児云猟
¢ 念粁の秘薦を、肝の催で鞭ける
CL-USER> (one:for 秘薦 [催 パラメ`タ]*)
Oneの児云猟
¢ 念粁の秘薦を、肝の催で鞭ける
CL-USER> (one:for 秘薦 [催 パラメ`タ]*)
オブジェクト,
stream,
pathname
パイプ議な催
$, ?, <, >, +>
1哈方v方,
シンボル
Oneの児云猟
¢ 念粁の秘薦を、肝の催で鞭ける
¢ 1哈方lmbda塀喘リ`ダマクロ
CL-USER> (one:for 秘薦 [催 パラメ`タ]*)
オブジェクト,
stream,
pathname
パイプ議な催
$, ?, <, >, +>
1哈方v方,
シンボル
;; (lambda (input) (search "hoge" input)) と揖じ
#/(search "hoge" _)
秘薦
催`$`: I尖の栽撹
¢ 念粁の秘薦にパラメ`タI尖を栽撹
¢ 箭
CL-USER> (one:for 秘薦 $ v方orv方兆 ...)
CL-USER> (one:for 1 $ print)
"1" ; 秘薦にprintがm喘された
CL-USER> (one:for 1 $ 1+ $ print)
"2" ; 1+の瘁にprintがm喘された
催`<`: 秘薦の貧をRり卦し
¢ 念粁の秘薦の貧をloopする(v方で)
¢ 箭
CL-USER> (one:for 秘薦 < v方orv方兆 ...)
CL-USER> (one:for '(1 2 3) < cdr $ princ)
123 ; cdrでloopしたものが竃薦された
CL-USER> (one:for #P"nums.csv" < one:read-line* $
print)
"id1,1"
"id2,2" ; read-line* (:EOFでKわる) でloopした
催`?`: 訳周によるフィルタ
¢ 念粁の秘薦のうち峰Zでtになるもののみ宥す
¢ 箭
CL-USER> (one:for 秘薦 ? 峰Z ...)
¢ CL-USER> (one:for '(1 2 3) < cdr ? oddp $ print)
1
3 ; 謎方だけが竃薦された
催`>`: I尖Y惚を聡めzむ
¢ 念粁の秘薦をリストに聡めzんでI尖する
¢ 箭
CL-USER> (one:for 秘薦 > Qするv方 ...)
CL-USER> (one:for 1 > identity $ print)
(1) ; 秘薦がリストになる
CL-USER> (one:for '(1 2 3) < cdr > identity $
print)
(1 2 3) ; 念粁の秘薦すべてがリストになる
CL-USER> (one:for '(1 2 3) < cdr > #/(apply #'+ _)
$ print)
6 ; 栽された
催`+>`: I尖Y惚をみzむ
¢ 念粁の秘薦をバッファせずにみzむ
¢ 箭
CL-USER> (one:for 秘薦 +> 2哈方v方 [兜豚] ...)
CL-USER> (one:for '(1 2 3) < cdr +> (lambda (a b)
(+ a b)) 0 $ print)
6 ; 怎しzまれた
; Lい。lambdaの何蛍が+だけでけるといいかも
gHの聞喘箭
ここからが云輝にやりたかったことです
ワンライナ`を屶址するワン
¢ CSVの2双朕栽
¢ 僻訌Δ鬟秋`ト
$ seq 1 5 | shuf | ros one "(one:for* - < one:read-
line* > #/(sort _ #'string<))"
1
´
5
$ ros one '(one:for* #P"data.csv" < one:read-line*
$ #/(split-sequence #, _) $ #/(nth 1 _) $ parse-
integer +> + 0)'
6
シェル椰1: け.罘`フォニアム
〆‐ファン痴雌/仝け.罘`フォニアム々という猟忖双だけで[
ぶシェル椰繁_〇, https://togetter.com/li/1041621
$ echo け.罘`フォニアム | ros one '(one:for - <
one:read-line* $ #/(cons _ (length _)) $ #/(cons
(repeat-sequence (car _) (1+ (cdr _))) (cdr _)) $ #/
(batches (car _) (1+ (cdr _))) < cdr $ #/(format t "~a~
%" _))'
け.罘`フォニアム
け.罘`フォニアムけ
.罘`フォニアムけ
ユ`フォニアムけ.
`フォニアムけ.罘`
フォニアムけ.罘`フ
ォニアムけ.罘`フォ
ニアムけ.罘`フォニ
アムけ.罘`フォニア
ムけ.罘`フォニアム
シェル椰2: サンシャイン学鍋ゲ`ム
https://twitter.com/ziuziu/status/918070729341587457
$ echo いまはもううごかないおじいさんのとけい | ros one
'(one:for* - < one:read-line* $ #/(ppcre:regex-replace-
all "い" _ "イェ`"))'
イェ`,泙呂發ΔΔ瓦なイェ`,じイェ`,気鵑里箸
イェ`
Oneの嶄附は
┐舛覆澆砲海海泙任妊好薀ぅ26旦です
Oのポイント
¢ 何瞳となる仝I尖々を鏡羨させる
¢ I尖gを局るデ`タはLispオブジェクト
¢ 福タイプ晒
C 秘薦にする崙囮猟(loopやif)をLす
C 秘薦のjなI尖(Lい兆念吉)をLす
¢ 福メモリ
パイプを岷す
$ cat access.log | grep html | sed 晩r | sort
パイプを岷す
$ cat access.log | grep html | sed 晩r | sort
grep sedcat sort
パイプを岷す
$ cat access.log | grep html | sed 晩r | sort
grep sedcat sort
grep sedcat sort( )) ) )(((
パイプを岷す
$ cat access.log | grep html | sed 晩r | sort
grep sedcat sort
grep sedcat sort( )) ) )(((
(sort (sed (grep (cat "access.log"))))
パイプを岷す
$ cat access.log | grep html | sed 晩r | sort
grep sedcat sort
grep sedcat sort( )) ) )(((
(sort (sed (grep (cat "access.log"))))
v方栽撹だ!
?パイプからLispへ?
福メモリを深える
¢ 秘薦を畠何メモリに崔いてはダメ
¢ 秘薦はすぐ肝のI尖に送す
;; ダメなコ`ド
;; access.logが10GBあったら´殖
(sort (mapcar #'sed
(mapcar #'grep
(cat "access.log")))
#'string<)
(sort (loop
:for line in (cat "access.log")
:when (grep line)
:collect (sed line))
#'string<)
I尖フロ`のMみ羨て1
¢ 坪何でこんなコ`ルグラフをもつ、いっこの
lambda塀をつくりたい
cat
grep
grep
grep
grep
sed
sed
sed
sort
< ? >
: 秘薦の送れ
: I尖のlambda塀
I尖フロ`のMみ羨て2
¢ lambda塀をBねてフロ`を恬る
C こんなv方でパ`ツを´
C Bねる
;;`$`はだいたいこんな湖じ
(defun compose (fn2 fn1)
(lambda (input)
(funcall fn2 (funcall fn1 input)))
;; cat | grep | sed
(compose (compose #'grep #'sed) #'cat)
湖
¢ lambda塀の秘れ徨仇zはデバッグつらい
¢ シェルやREPLで、まあまあ聞える
¢ まだまだ個鋲の噫仇ありそう
C `+>`に2哈方lambda塀をくところなど
Oneをためしに聞ってみてね。
`$ ros install 岳-壊庄稼/看稼艶舷で秘るよ

More Related Content

What's hot (18)

Boost tour 1.60.0 merge
Boost tour 1.60.0 mergeBoost tour 1.60.0 merge
Boost tour 1.60.0 merge
Akira Takahashi
?
沿艶界看を聞おう
沿艶界看を聞おう沿艶界看を聞おう
沿艶界看を聞おう
Hideaki Miyake
?
すごい constexpr たのしくレイトレ
すごい constexpr たのしくレイトレすごい constexpr たのしくレイトレ
すごい constexpr たのしくレイトレ
Genya Murakami
?
Constexpr 嶄3溺徨テクニック
Constexpr 嶄3溺徨テクニックConstexpr 嶄3溺徨テクニック
Constexpr 嶄3溺徨テクニック
Genya Murakami
?
Python C亠僥プログラミング デ`タ蛍裂ライブラリ`盾h
Python C亠僥プログラミング デ`タ蛍裂ライブラリ`盾hPython C亠僥プログラミング デ`タ蛍裂ライブラリ`盾h
Python C亠僥プログラミング デ`タ蛍裂ライブラリ`盾h
Etsuji Nakai
?
SECDマシン g廾と咾とその麿もろもろについて
SECDマシン g廾と咾とその麿もろもろについてSECDマシン g廾と咾とその麿もろもろについて
SECDマシン g廾と咾とその麿もろもろについて
t-sin
?
c看稼壊岳艶恰沿姻v方はコンパイル扮I尖。これはいい。g佩扮が麓んで需える。界沿顎の戎蕗が療こえてきそうだ
c看稼壊岳艶恰沿姻v方はコンパイル扮I尖。これはいい。g佩扮が麓んで需える。界沿顎の戎蕗が療こえてきそうだc看稼壊岳艶恰沿姻v方はコンパイル扮I尖。これはいい。g佩扮が麓んで需える。界沿顎の戎蕗が療こえてきそうだ
c看稼壊岳艶恰沿姻v方はコンパイル扮I尖。これはいい。g佩扮が麓んで需える。界沿顎の戎蕗が療こえてきそうだ
Genya Murakami
?
Scapy presentation Remake(屎)
Scapy presentation Remake(屎)Scapy presentation Remake(屎)
Scapy presentation Remake(屎)
ashigirl ZareGoto
?
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
?
酷庄稼糸1
酷庄稼糸1酷庄稼糸1
酷庄稼糸1
akitsukada
?
GNU awk (gawk) を喘いた Apache ログ盾裂圭隈
GNU awk (gawk) を喘いた Apache ログ盾裂圭隈GNU awk (gawk) を喘いた Apache ログ盾裂圭隈
GNU awk (gawk) を喘いた Apache ログ盾裂圭隈
鴬猟 徒
?
Node.js - sleep sort algorithm
Node.js - sleep sort algorithmNode.js - sleep sort algorithm
Node.js - sleep sort algorithm
takesako
?
メタメタプログラミング檎顎恢霞
メタメタプログラミング檎顎恢霞メタメタプログラミング檎顎恢霞
メタメタプログラミング檎顎恢霞
emasaka
?
すごい constexpr たのしくレイトレ
すごい constexpr たのしくレイトレすごい constexpr たのしくレイトレ
すごい constexpr たのしくレイトレ
Genya Murakami
?
Constexpr 嶄3溺徨テクニック
Constexpr 嶄3溺徨テクニックConstexpr 嶄3溺徨テクニック
Constexpr 嶄3溺徨テクニック
Genya Murakami
?
Python C亠僥プログラミング デ`タ蛍裂ライブラリ`盾h
Python C亠僥プログラミング デ`タ蛍裂ライブラリ`盾hPython C亠僥プログラミング デ`タ蛍裂ライブラリ`盾h
Python C亠僥プログラミング デ`タ蛍裂ライブラリ`盾h
Etsuji Nakai
?
SECDマシン g廾と咾とその麿もろもろについて
SECDマシン g廾と咾とその麿もろもろについてSECDマシン g廾と咾とその麿もろもろについて
SECDマシン g廾と咾とその麿もろもろについて
t-sin
?
c看稼壊岳艶恰沿姻v方はコンパイル扮I尖。これはいい。g佩扮が麓んで需える。界沿顎の戎蕗が療こえてきそうだ
c看稼壊岳艶恰沿姻v方はコンパイル扮I尖。これはいい。g佩扮が麓んで需える。界沿顎の戎蕗が療こえてきそうだc看稼壊岳艶恰沿姻v方はコンパイル扮I尖。これはいい。g佩扮が麓んで需える。界沿顎の戎蕗が療こえてきそうだ
c看稼壊岳艶恰沿姻v方はコンパイル扮I尖。これはいい。g佩扮が麓んで需える。界沿顎の戎蕗が療こえてきそうだ
Genya Murakami
?
GNU awk (gawk) を喘いた Apache ログ盾裂圭隈
GNU awk (gawk) を喘いた Apache ログ盾裂圭隈GNU awk (gawk) を喘いた Apache ログ盾裂圭隈
GNU awk (gawk) を喘いた Apache ログ盾裂圭隈
鴬猟 徒
?
Node.js - sleep sort algorithm
Node.js - sleep sort algorithmNode.js - sleep sort algorithm
Node.js - sleep sort algorithm
takesako
?
メタメタプログラミング檎顎恢霞
メタメタプログラミング檎顎恢霞メタメタプログラミング檎顎恢霞
メタメタプログラミング檎顎恢霞
emasaka
?

Similar to One - Common Lispでもワンライナ`したい (20)

Boost jp9 program_options
Boost jp9 program_optionsBoost jp9 program_options
Boost jp9 program_options
nyaocat
?
これからの仝冱Z々のをしよう DD 隆栖を伏きるためのツ`ル
これからの仝冱Z々のをしよう DD 隆栖を伏きるためのツ`ルこれからの仝冱Z々のをしよう DD 隆栖を伏きるためのツ`ル
これからの仝冱Z々のをしよう DD 隆栖を伏きるためのツ`ル
Nobuhisa Koizumi
?
遺++コミュニティ`の嶄伉で遺++を禽鴛皆る
遺++コミュニティ`の嶄伉で遺++を禽鴛皆る遺++コミュニティ`の嶄伉で遺++を禽鴛皆る
遺++コミュニティ`の嶄伉で遺++を禽鴛皆る
Hideyuki Tanaka
?
Common LispでGPGPU
Common LispでGPGPUCommon LispでGPGPU
Common LispでGPGPU
gos-k
?
舘酷皆のソ`スコ`ドをチラ需してみる
舘酷皆のソ`スコ`ドをチラ需してみる舘酷皆のソ`スコ`ドをチラ需してみる
舘酷皆のソ`スコ`ドをチラ需してみる
Koichi Suzuki
?
2017-12-04 Linuxの児云夛とBashでのQい圭
2017-12-04 Linuxの児云夛とBashでのQい圭2017-12-04 Linuxの児云夛とBashでのQい圭
2017-12-04 Linuxの児云夛とBashでのQい圭
再峠 局
?
Cli mini Hack!#1 ~TerminalとのH沈を侮めよう~
Cli mini Hack!#1 ~TerminalとのH沈を侮めよう~Cli mini Hack!#1 ~TerminalとのH沈を侮めよう~
Cli mini Hack!#1 ~TerminalとのH沈を侮めよう~
Kei IWASAKI
?
つくっておぼえる∀襯泪轡?岷念でg廾園?
つくっておぼえる∀襯泪轡?岷念でg廾園?つくっておぼえる∀襯泪轡?岷念でg廾園?
つくっておぼえる∀襯泪轡?岷念でg廾園?
Eric Sartre
?
シェル椰兜伉宀によるシェル椰秘壇
シェル椰兜伉宀によるシェル椰秘壇シェル椰兜伉宀によるシェル椰秘壇
シェル椰兜伉宀によるシェル椰秘壇
icchy
?
或遺温馨鉛のアセンブラをiむ三
或遺温馨鉛のアセンブラをiむ三或遺温馨鉛のアセンブラをiむ三
或遺温馨鉛のアセンブラをiむ三
nomaddo
?
Java SE 8 lambdaで笋錣 プログラミングスタイル
Java SE 8 lambdaで笋錣 プログラミングスタイルJava SE 8 lambdaで笋錣 プログラミングスタイル
Java SE 8 lambdaで笋錣 プログラミングスタイル
なおき きしだ
?
そんな廾姥で寄嬋健か
そんな廾姥で寄嬋健かそんな廾姥で寄嬋健か
そんな廾姥で寄嬋健か
2celeb
?
Application Developer Festival 2015 LT
Application Developer Festival 2015 LTApplication Developer Festival 2015 LT
Application Developer Festival 2015 LT
Junpei Matsuda
?
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
Ransui Iso
?
Boost jp9 program_options
Boost jp9 program_optionsBoost jp9 program_options
Boost jp9 program_options
nyaocat
?
これからの仝冱Z々のをしよう DD 隆栖を伏きるためのツ`ル
これからの仝冱Z々のをしよう DD 隆栖を伏きるためのツ`ルこれからの仝冱Z々のをしよう DD 隆栖を伏きるためのツ`ル
これからの仝冱Z々のをしよう DD 隆栖を伏きるためのツ`ル
Nobuhisa Koizumi
?
遺++コミュニティ`の嶄伉で遺++を禽鴛皆る
遺++コミュニティ`の嶄伉で遺++を禽鴛皆る遺++コミュニティ`の嶄伉で遺++を禽鴛皆る
遺++コミュニティ`の嶄伉で遺++を禽鴛皆る
Hideyuki Tanaka
?
Common LispでGPGPU
Common LispでGPGPUCommon LispでGPGPU
Common LispでGPGPU
gos-k
?
舘酷皆のソ`スコ`ドをチラ需してみる
舘酷皆のソ`スコ`ドをチラ需してみる舘酷皆のソ`スコ`ドをチラ需してみる
舘酷皆のソ`スコ`ドをチラ需してみる
Koichi Suzuki
?
2017-12-04 Linuxの児云夛とBashでのQい圭
2017-12-04 Linuxの児云夛とBashでのQい圭2017-12-04 Linuxの児云夛とBashでのQい圭
2017-12-04 Linuxの児云夛とBashでのQい圭
再峠 局
?
Cli mini Hack!#1 ~TerminalとのH沈を侮めよう~
Cli mini Hack!#1 ~TerminalとのH沈を侮めよう~Cli mini Hack!#1 ~TerminalとのH沈を侮めよう~
Cli mini Hack!#1 ~TerminalとのH沈を侮めよう~
Kei IWASAKI
?
つくっておぼえる∀襯泪轡?岷念でg廾園?
つくっておぼえる∀襯泪轡?岷念でg廾園?つくっておぼえる∀襯泪轡?岷念でg廾園?
つくっておぼえる∀襯泪轡?岷念でg廾園?
Eric Sartre
?
シェル椰兜伉宀によるシェル椰秘壇
シェル椰兜伉宀によるシェル椰秘壇シェル椰兜伉宀によるシェル椰秘壇
シェル椰兜伉宀によるシェル椰秘壇
icchy
?
或遺温馨鉛のアセンブラをiむ三
或遺温馨鉛のアセンブラをiむ三或遺温馨鉛のアセンブラをiむ三
或遺温馨鉛のアセンブラをiむ三
nomaddo
?
Java SE 8 lambdaで笋錣 プログラミングスタイル
Java SE 8 lambdaで笋錣 プログラミングスタイルJava SE 8 lambdaで笋錣 プログラミングスタイル
Java SE 8 lambdaで笋錣 プログラミングスタイル
なおき きしだ
?
そんな廾姥で寄嬋健か
そんな廾姥で寄嬋健かそんな廾姥で寄嬋健か
そんな廾姥で寄嬋健か
2celeb
?
Application Developer Festival 2015 LT
Application Developer Festival 2015 LTApplication Developer Festival 2015 LT
Application Developer Festival 2015 LT
Junpei Matsuda
?
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
Ransui Iso
?

One - Common Lispでもワンライナ`したい