Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Lispへの招待
Search
stibear1996
April 24, 2013
Programming
0
230
Lispへの招待
Used at 新入部員初等教育プレゼン
stibear1996
April 24, 2013
Tweet
Share
More Decks by stibear1996
See All by stibear1996
菊の花
stibear
0
97
Other Decks in Programming
See All in Programming
エンジニアとして関わる要件と仕様(公開用)
murabayashi
0
320
CSC509 Lecture 12
javiergs
PRO
0
160
DevTools extensions で 独自の DevTool を開発する | FlutterKaigi 2024
kokiyoshida
0
170
カンファレンスの「アレ」Webでなんとかしませんか? / Conference “thing” Why don't you do something about it on the Web?
dero1to
1
130
TypeScript Graph でコードレビューの心理的障壁を乗り越える
ysk8hori
3
1.3k
我々のデザインシステムは Chakra v3 にアップデートします
shunya078
2
1.1k
flutterkaigi_2024.pdf
kyoheig3
0
260
大規模サイトリビルドの現場から:成功と失敗のリアルな教訓 / Site Rebuild,Real Lessons Learned from Successes and Failures_JJUG Fall 2024
techtekt
0
160
[KR] Open-Source Ecosystems
skydoves
0
100
Nurturing OpenJDK distribution: Eclipse Temurin Success History and plan
ivargrimstad
0
1.3k
Enabling DevOps and Team Topologies Through Architecture: Architecting for Fast Flow
cer
PRO
0
380
イベント駆動で成長して委員会
happymana
1
350
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Writing Fast Ruby
sferik
627
61k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
Building Better People: How to give real-time feedback that sticks.
wjessup
364
19k
Being A Developer After 40
akosma
87
590k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
What's in a price? How to price your products and services
michaelherold
243
12k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
Designing on Purpose - Digital PM Summit 2013
jponch
115
7k
GraphQLとの向き合い方2022年版
quramy
43
13k
Transcript
~唯一無二の言語を学ぶ~
まずは自己紹介から stibear (@stibear1996) NPCAでは希少種であるLisper 真人間
ようこそ、NPCAへ! 皆さんには、今後我が部で精力的に活動して いってもらうために、基礎的な知識を養ってもら います。 具体的には、プログラミングに使用する人工言 語、つまりプログラミング言語について、学習し てもらうことになります。 その一つの候補として、私の教える、Lispという 言語について説明します。 質問があれば、いつでもしてもらって結構です。
Lispとは? 関数型プログラミング言語の原初 S式を使って式指向のプログラミング(そのため 非常にシンプル) 人工知能ブームのメイン言語となり、流行した 1958年にJohn
McCarthyによって「発見」される。 それ以来、たくさんの方言に分化 現在主流となっているのは、 Common Lisp Scheme Clojure Emacs Lisp の4つ
Lispとは? 関数型プログラミング言語の原初 S式を使って式指向のプログラミング(そのため 非常にシンプル) 人工知能ブームのメイン言語となり、流行した 1958年にJohn
McCarthyによって「発見」される。 それ以来、たくさんの方言に分化 現在主流となっているのは、 Common Lisp Scheme Clojure Emacs Lisp の4つ
関数型言語? プログラミング言語には、 命令型言語 宣言型言語 があり、関数型言語は宣言型言語に属する 関数型言語は最近(特にLLerの間で)流行
バグを少なくすることができる (あまり意識する必要はない。複数の言語を 扱うようになれば、自然と理解できるようにな る)
Lispとは? 関数型プログラミング言語の原初 S式を使って式指向のプログラミング(そのため 非常にシンプル) 人工知能ブームのメイン言語となり、流行した 1958年にJohn
McCarthyによって「発見」される。 それ以来、たくさんの方言に分化 現在主流となっているのは、 Common Lisp Scheme Clojure Emacs Lisp の4つ
Lispとは? 関数型プログラミング言語の原初 S式を使って式指向のプログラミング(そのため 非常にシンプル) 人工知能ブームのメイン言語となり、流行した 1958年にJohn
McCarthyによって「発見」される。 それ以来、たくさんの方言に分化 現在主流となっているのは、 Common Lisp Scheme Clojure Emacs Lisp の4つ
S式? symbolic expression Lispでは全てが式 S式という構文を使ってそれを表現 これによって後述の高度なメタプログラミン
グを実現 ちなみにM式というものもあったが、今は使 われない
Lispとは? 関数型プログラミング言語の原初 S式を使って式指向のプログラミング(そのため 非常にシンプル) 人工知能ブームのメイン言語となり、流行した 1958年にJohn
McCarthyによって「発見」される。 それ以来、たくさんの方言に分化した 現在主流となっているのは、 Common Lisp Scheme Clojure Emacs Lisp の4つ
Lispとは? 関数型プログラミング言語の原初 S式を使って式指向のプログラミング(そのため 非常にシンプル) 人工知能ブームのメイン言語となり、流行した 1958年にJohn
McCarthyによって「発見」される。 それ以来、たくさんの方言に分化した 現在主流となっているのは、 Common Lisp Scheme Clojure Emacs Lisp の4つ
人工知能? コンピュータに人間と同様の知能を持たせ ようという試み 人間の脳の働きを真似ることを本質とした場 合、その研究は、上手く行っているとは言い 難い しかし、それらの研究成果は確実に私たち
の身の回りで役立っている
Lispとは? 関数型プログラミング言語の原初 S式を使って式指向のプログラミング(そのため 非常にシンプル) 人工知能ブームのメイン言語となり、流行した 1958年にJohn
McCarthyによって「発見」される。 それ以来、たくさんの方言に分化 現在主流となっているのは、 Common Lisp Scheme Clojure Emacs Lisp の4つ
Lispとは? 関数型プログラミング言語の原初 S式を使って式指向のプログラミング(そのため 非常にシンプル) 人工知能ブームのメイン言語となり、流行した 1958年にJohn
McCarthyによって「発見」される。 それ以来、たくさんの方言に分化 現在主流となっているのは、 Common Lisp Scheme Clojure Emacs Lisp の4つ
今回の新入部員初等教育では、 そのうちの、Common Lispという方言 を主に教えます (方言間の差異はそれほど大きくはないので、どれか一つ 習得すれば、他は比較的簡単に習得できます) ※方言というのは、日本語に関西 弁、東京弁などあるように、基本的 にはその言語の文法に従っている が、細部において差異の見受けら
れるもののこと
Common Lispとは? 数多あるLisp方言を統一する目的で開発され た それまでに培われてきたLisp文化を受け継い でいる ANSIで標準化
NASAでもCommon Lispによって作られたプロ グラムが認められた GoogleにもITAというCommon Lispでのプロジェ クトで成功した会社が買収された(つまりGoogle もその価値を認めている) 抽象度の高いところから低いところまでカバー
Common Lispとは? 数多あるLisp方言を統一する目的で開発され た それまでに培われてきたLisp文化を受け継い でいる ANSIで標準化
NASAでもCommon Lispによって作られたプロ グラムが認められた GoogleにもITAというCommon Lispでのプロジェ クトで成功した会社が買収された(つまりGoogle もその価値を認めている) 抽象度の高いところから低いところまでカバー
標準化? ANSI(アメリカの標準化団体)によって標準化 標準化とは、要は文書によってそれが統一され ているということ。標準化されていることは、その 仕様が固まっており、より可搬性が高くなる 時代は移りゆくもの
特定の企業体や、財団法人などが開発する言 語なども多くありますが、仕様が簡単に変わりう る
Common Lispとは? 数多あるLisp方言を統一する目的で開発され た それまでに培われてきたLisp文化を受け継い でいる ANSIで標準化
NASAでもCommon Lispによって作られたプロ グラムが認められた GoogleにもITAというCommon Lispでのプロジェ クトで成功した会社が買収された(つまりGoogle もその価値を認めている) 抽象度の高いところから低いところまでカバー
Common Lispとは? 数多あるLisp方言を統一する目的で開発され た それまでに培われてきたLisp文化を受け継い でいる ANSIで標準化
NASAでもCommon Lispによって作られたプロ グラムが認められた GoogleにもITAというCommon Lispでのプロジェ クトで成功した会社が買収された(つまりGoogle もその価値を認めている) 抽象度の高いところから低いところまでカバー
抽象度? 抽象度が低いとハードに近いが、記述性は 下がる(つまり記述量が増えたりなど複雑化 する) 抽象度が高いと記述性が上がるが、ハード より遠い(つまり性能が確保しにくい) Common
Lispはその点で、抽象度の高いと ころ・低いところを広くカバーしており、強み である
ところで、なぜLispか?
Lispの成立 1958年、MITのJohn McCarthy教授によっ て「発見」される 当初、アルゴリズムの数学的記法であった のをコンピュータで実行可能なものにした よって、その血筋は数学からである
Lispの強み S式を使い、式のみで(=文を使わず)シン プルかつエレガントなプログラミング マクロによる強力なメタプログラミング(=プ ログラムによるプログラミング) 動的型付けのため、型をあまり意識せずプ ログラミングすることができる
言語の核がシンプルなため、すぐに理解し、 実用することができる
すべての言語はLispに漸近する かのLispハッカー、P. Grahamは言う、 「各言語は次第にLispに近付いてきている。」 どうして漸近するのか?(してるといえるのか?) → Lispが最良であるため、プログラミング言語がより良 くなりつつあると仮定するなら、そこに漸近すると考えら
れます Lispがもしあらゆるプログラミング言語の先を行って いるとしたら、それらの中で最も強力だとしたら、そ れを使わない理由があろうか?
すべての言語はLispに漸近する かのLispハッカー、P. Grahamは言う、 「各言語は次第にLispに近付いてきている。」 どうして漸近するのか?(してるといえるのか?) → Lispが最良であるため、プログラミング言語がより良 くなりつつあると仮定するなら、そこに漸近すると考えら
れます Lispがもしあらゆるプログラミング言語の先を行って いるとしたら、それらの中で最も強力だとしたら、そ れを使わない理由があろうか?
いえ、ありません。
根拠は? Lispが最も先を行っているという根拠はなんだ ろう? → 複数の言語を勉強してみると分かるようになる のだが、プログラミング言語の中にも流行というも のがあり、その中心をゆく言語は、どんどんとLisp に近づいていっています
最強のものがはっきりしているなら、それを使う べきだろう?
とりあえず実演? 質問等に答えつつ、適当に実演し たいと思います
参考にすべき文献 「ハッカーと画家」 Paul Graham (原著), 川合 史朗 (翻訳)
「Land of Lisp」 M.D. Conrad Barski (著), 川 合 史朗 (翻訳) 「実践Common Lisp」 Peter Seibel (著), 佐野 匡俊 (翻訳), 水丸淳 (翻訳), 園城雅之 (翻訳), 金子祐介 (翻訳) 「On Lisp」 Paul Graham (原著, 翻訳), 野田 開 (翻訳) ほか