Submit Search
Upload
おいしいLisp
•
2 likes
•
1,209 views
Kent Ohashi
Follow
Lisp/S式とClojureの基本を簡単に紹介。 Clojureおーいしい!
Read less
Read more
Software
Report
Share
Report
Share
1 of 20
Download Now
Download to read offline
Recommended
Functional Way
Functional Way
Kent Ohashi
From Java To Clojure
From Java To Clojure
Kent Ohashi
From JS To CLJS
From JS To CLJS
Kent Ohashi
C++14 Overview
C++14 Overview
Akira Takahashi
大人のお型付け
大人のお型付け
Nobuhisa Koizumi
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
Nobuhisa Koizumi
More C++11
More C++11
京大 マイコンクラブ
並行プログラミングと継続モナド
並行プログラミングと継続モナド
Kousuke Ruichi
More Related Content
What's hot
C++ lecture-2
C++ lecture-2
sunaemon
C++11
C++11
京大 マイコンクラブ
Visual C++で使えるC++11
Visual C++で使えるC++11
nekko1119
Introduction to cython
Introduction to cython
Atsuo Ishimoto
ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体
digitalghost
【java8 勉強会】 怖くない!ラムダ式, Stream API
【java8 勉強会】 怖くない!ラムダ式, Stream API
dcomsolution
Fork/Join Framework。そしてLambdaへ。
Fork/Join Framework。そしてLambdaへ。
Yuichi Sakuraba
Java SE 8 lambdaで変わる プログラミングスタイル
Java SE 8 lambdaで変わる プログラミングスタイル
なおき きしだ
言語処理系入門4
言語処理系入門4
Kenta Hattori
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
Nobuhisa Koizumi
JavaScript 講習会 #1
JavaScript 講習会 #1
Susisu
Scalamacrosについて
Scalamacrosについて
dekosuke
C++ lecture-0
C++ lecture-0
sunaemon
言語処理系入門5
言語処理系入門5
Kenta Hattori
60分で体験する Stream / Lambda ハンズオン
60分で体験する Stream / Lambda ハンズオン
Hiroto Yamakawa
F#によるFunctional Programming入門
F#によるFunctional Programming入門
bleis tift
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みください
digitalghost
Good Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX Philosophy
Yuya Takeyama
Tagless Final DSL
Tagless Final DSL
Hikaru Yoshimura
What's hot
(20)
C++ lecture-2
C++ lecture-2
C++11
C++11
Visual C++で使えるC++11
Visual C++で使えるC++11
Introduction to cython
Introduction to cython
ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体
【java8 勉強会】 怖くない!ラムダ式, Stream API
【java8 勉強会】 怖くない!ラムダ式, Stream API
Fork/Join Framework。そしてLambdaへ。
Fork/Join Framework。そしてLambdaへ。
Java SE 8 lambdaで変わる プログラミングスタイル
Java SE 8 lambdaで変わる プログラミングスタイル
言語処理系入門4
言語処理系入門4
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
JavaScript 講習会 #1
JavaScript 講習会 #1
Scalamacrosについて
Scalamacrosについて
C++ lecture-0
C++ lecture-0
言語処理系入門5
言語処理系入門5
60分で体験する Stream / Lambda ハンズオン
60分で体験する Stream / Lambda ハンズオン
F#によるFunctional Programming入門
F#によるFunctional Programming入門
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みください
Good Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX Philosophy
Tagless Final DSL
Tagless Final DSL
Viewers also liked
Redesigning Common Lisp
Redesigning Common Lisp
fukamachi
kyotolisp#1 LT3 美しいLispの書き方 (1)
kyotolisp#1 LT3 美しいLispの書き方 (1)
hayato_hashimoto
床下からCommon Lisp
床下からCommon Lisp
Kazuhiro Hishinuma
Vimとgo
Vimとgo
三四郎 平原
Vimから見たemacs
Vimから見たemacs
Shougo
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017
Carol Smith
Viewers also liked
(6)
Redesigning Common Lisp
Redesigning Common Lisp
kyotolisp#1 LT3 美しいLispの書き方 (1)
kyotolisp#1 LT3 美しいLispの書き方 (1)
床下からCommon Lisp
床下からCommon Lisp
Vimとgo
Vimとgo
Vimから見たemacs
Vimから見たemacs
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017
Similar to おいしいLisp
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Satoshi imai
たのしい関数型
たのしい関数型
Shinichi Kozake
Java8から始める関数型プログラミング
Java8から始める関数型プログラミング
stylefreeslide
Haskell超入門 Part.1
Haskell超入門 Part.1
Yuichi Watanabe
200319 eash python_shareslide_functions
200319 eash python_shareslide_functions
Hiroki Katayama
Everyday Life with clojure.spec
Everyday Life with clojure.spec
Kent Ohashi
関数プログラミング入門
関数プログラミング入門
Hideyuki Tanaka
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
京大 マイコンクラブ
Introduction of Python
Introduction of Python
Tomoya Nakayama
Apache Spark チュートリアル
Apache Spark チュートリアル
K Yamaguchi
初めてのHaskell (表)
初めてのHaskell (表)
karky7
Rの高速化
Rの高速化
弘毅 露崎
ATN No.2 Scala事始め
ATN No.2 Scala事始め
AdvancedTechNight
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
Ouka Yuka
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
Ransui Iso
What Dotty fixes @ Scala関西サミット
What Dotty fixes @ Scala関西サミット
Taisuke Oe
命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ
Naoki Kitora
Python Kyoto study
Python Kyoto study
Naoya Inada
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
fukuoka.ex
Lisperはじめました
Lisperはじめました
Nobutada Matsubara
Similar to おいしいLisp
(20)
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
たのしい関数型
たのしい関数型
Java8から始める関数型プログラミング
Java8から始める関数型プログラミング
Haskell超入門 Part.1
Haskell超入門 Part.1
200319 eash python_shareslide_functions
200319 eash python_shareslide_functions
Everyday Life with clojure.spec
Everyday Life with clojure.spec
関数プログラミング入門
関数プログラミング入門
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
Introduction of Python
Introduction of Python
Apache Spark チュートリアル
Apache Spark チュートリアル
初めてのHaskell (表)
初めてのHaskell (表)
Rの高速化
Rの高速化
ATN No.2 Scala事始め
ATN No.2 Scala事始め
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
What Dotty fixes @ Scala関西サミット
What Dotty fixes @ Scala関西サミット
命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ
Python Kyoto study
Python Kyoto study
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
Lisperはじめました
Lisperはじめました
More from Kent Ohashi
Team Geek Revisited
Team Geek Revisited
Kent Ohashi
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 Technologies
Kent Ohashi
Clojureコレクションで探るimmutableでpersistentな世界
Clojureコレクションで探るimmutableでpersistentな世界
Kent Ohashi
英語学習者のためのフランス語文法入門: フランス語完全理解(?)
英語学習者のためのフランス語文法入門: フランス語完全理解(?)
Kent Ohashi
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
Kent Ohashi
実用のための語源学入門
実用のための語源学入門
Kent Ohashi
メタプログラミング入門
メタプログラミング入門
Kent Ohashi
労働法の世界
労働法の世界
Kent Ohashi
Clojureで作る"simple"なDSL
Clojureで作る"simple"なDSL
Kent Ohashi
RDBでのツリー表現入門
RDBでのツリー表現入門
Kent Ohashi
GraphQL入門
GraphQL入門
Kent Ohashi
たのしい多言語学習
たのしい多言語学習
Kent Ohashi
Ductモジュール入門
Ductモジュール入門
Kent Ohashi
Clojure REPL: The Good Parts
Clojure REPL: The Good Parts
Kent Ohashi
"Simple Made Easy" Made Easy
"Simple Made Easy" Made Easy
Kent Ohashi
Clojurian Conquest
Clojurian Conquest
Kent Ohashi
ClojurianからみたElixir
ClojurianからみたElixir
Kent Ohashi
GraphQL API in Clojure
GraphQL API in Clojure
Kent Ohashi
法学入門
法学入門
Kent Ohashi
Interceptors: Into the Core of Pedestal
Interceptors: Into the Core of Pedestal
Kent Ohashi
More from Kent Ohashi
(20)
Team 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 Technologies
Clojureコレクションで探るimmutableでpersistentな世界
Clojureコレクションで探るimmutableでpersistentな世界
英語学習者のためのフランス語文法入門: フランス語完全理解(?)
英語学習者のためのフランス語文法入門: フランス語完全理解(?)
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
実用のための語源学入門
実用のための語源学入門
メタプログラミング入門
メタプログラミング入門
労働法の世界
労働法の世界
Clojureで作る"simple"なDSL
Clojureで作る"simple"なDSL
RDBでのツリー表現入門
RDBでのツリー表現入門
GraphQL入門
GraphQL入門
たのしい多言語学習
たのしい多言語学習
Ductモジュール入門
Ductモジュール入門
Clojure REPL: The Good Parts
Clojure REPL: The Good Parts
"Simple Made Easy" Made Easy
"Simple Made Easy" Made Easy
Clojurian Conquest
Clojurian Conquest
ClojurianからみたElixir
ClojurianからみたElixir
GraphQL API in Clojure
GraphQL API in Clojure
法学入門
法学入門
Interceptors: Into the Core of Pedestal
Interceptors: Into the Core of Pedestal
おいしいLisp
1.
おいしいLisp
2.
lagenorhynque
3.
自己紹介 (defprofile lagenorhynque [Kent
OHASHI] :github/twitter @lagenorhynque :company 株式会社オプト :languages [Clojure Haskell Python Scala English français Deutsch русский] :interests [プログラミング 語学 数学])
4.
Lispエイリアン cf. http://www.lisperati.com/logo.html alien language
5.
標準偏差(standard deviation)を計算しよう 標準偏差- Wikipedia
6.
関数呼び出し: Python >>> standard_deviation([1, 2,
3, 4, 5]) 1.4142135623730951
7.
関数定義: Python from math import
sqrt def standard_deviation(xs): n = len(xs) μ = sum(xs) / n return sqrt(sum((x - μ) ** 2 for x in xs) / n)
8.
関数呼び出し: Lisp (Clojure) (standard-deviation [1 2
3 4 5]) user=> 1.4142135623730951
9.
Python 関数名(引数1, 引数2, 引数3,
...) Lisp (関数名引数1 引数2 引数3 ...)
10.
関数定義: Lisp (Clojure) (defn standard-deviation [xs] (let
[n (count xs) μ (/ (apply + xs) n)] (Math/sqrt (/ (apply + (for [x xs] (Math/pow (- x μ) 2))) n))))
11.
リファクタリング: Lisp (Clojure) なんとかしたい…… apply + ... 関数を定義しよう! (defn
sum [ns] (apply + ns))
12.
関数の利用: Lisp (Clojure) apply + ⇒sum (defn
standard-deviation [xs] (let [n (count xs) μ (/ (sum xs) n)] (Math/sqrt (/ (sum (for [x xs] (Math/pow (- x μ) 2))) n))))
13.
リファクタリング: Lisp (Clojure) なんとかしたい…… (Math/sqrt (/ (sum
(for [x xs] (Math/pow (- x μ) 2))) n)) マクロを定義しよう! (defmacro -> [x & forms] (loop [x x, forms forms] (if forms (let [form (first forms) threaded (if (seq? form) (with-meta `(~(first form) ~x ~@(next form)) (meta form)) (list form x))] (recur threaded (next forms))) x)))
14.
マクロの利用: Lisp (Clojure) (h (g (f
x))) ⇒(-> x f g h) (defn standard-deviation [xs] (let [n (count xs) μ (/ (sum xs) n)] (-> (for [x xs] (Math/pow (- x μ) 2)) sum (/ n) Math/sqrt)))
15.
Lisp/S式 homoiconicity (同図像性): code
as data マクロ: 自由自在なメタプログラミング DSL (ドメイン特化言語): 対象領域に合わせたミニ言語の構築 Lispにとってメタプログラミングは黒魔術ではなく言語の基本機能
16.
DSLの例: SQL SELECT u.id, u.name FROM user
u WHERE u.age >= 20; : Tasty SQL for ClojureKorma (select user (fields :id :name) (where (>= :age 20)))
17.
DSLの例: HTML <head> <title>たのしいLisp</title> </head> <body> <ul> <li>Scheme</li> <li>Common Lisp</li> <li>Clojure</li> </ul> </body> : Fast
library for rendering HTML in ClojureHiccup (html [:head [:title "たのしいLisp"]] [:body [:ul (for [x ["Scheme" "Common Lisp" "Clojure"]] [:li x])]])
18.
DSLの例: JavaScript let colors =
["red", "yellow", "green"]; colors.forEach(color => console.log(color)); : Clojure to JS compilerClojureScript (def colors ["red" "yellow" "green"]) (doseq [color colors] (println color))
19.
Lispのおいしさ コードをデータとして、データをコードとしてシームレスに扱える そのおかげで言語自体を目的に合わせて最適化できる
20.
Further Reading : Clojure公式 : ClojureScript公式 :
ブラウザで試せるClojure REPLのひとつ : ブラウザで試せるClojureScript REPLのひとつ : Clojureの入門書(日本語では現在唯一) : Clojureのレシピ本 : Lisp(主にCommon Lisp)でのマクロの活用について : DSL設計/実装のノウハウとRuby, Scala, Groovy, Clojureのメタプログラミングについて Clojure ClojureScript Clojure instaREPL Replumb REPL 『プログラミングClojure』 『おいしいClojure入門』 『On Lisp』 『実践プログラミングDSL』
Download Now