Slide 1

Slide 1 text

~唯一無二の言語を学ぶ~

Slide 2

Slide 2 text

まずは自己紹介から  stibear (@stibear1996)  NPCAでは希少種であるLisper  真人間

Slide 3

Slide 3 text

ようこそ、NPCAへ! 皆さんには、今後我が部で精力的に活動して いってもらうために、基礎的な知識を養ってもら います。 具体的には、プログラミングに使用する人工言 語、つまりプログラミング言語について、学習し てもらうことになります。 その一つの候補として、私の教える、Lispという 言語について説明します。 質問があれば、いつでもしてもらって結構です。

Slide 4

Slide 4 text

Lispとは?  関数型プログラミング言語の原初  S式を使って式指向のプログラミング(そのため 非常にシンプル)  人工知能ブームのメイン言語となり、流行した  1958年にJohn McCarthyによって「発見」される。 それ以来、たくさんの方言に分化  現在主流となっているのは、  Common Lisp  Scheme  Clojure  Emacs Lisp の4つ

Slide 5

Slide 5 text

Lispとは?  関数型プログラミング言語の原初  S式を使って式指向のプログラミング(そのため 非常にシンプル)  人工知能ブームのメイン言語となり、流行した  1958年にJohn McCarthyによって「発見」される。 それ以来、たくさんの方言に分化  現在主流となっているのは、  Common Lisp  Scheme  Clojure  Emacs Lisp の4つ

Slide 6

Slide 6 text

関数型言語?  プログラミング言語には、  命令型言語  宣言型言語 があり、関数型言語は宣言型言語に属する  関数型言語は最近(特にLLerの間で)流行  バグを少なくすることができる  (あまり意識する必要はない。複数の言語を 扱うようになれば、自然と理解できるようにな る)

Slide 7

Slide 7 text

Lispとは?  関数型プログラミング言語の原初  S式を使って式指向のプログラミング(そのため 非常にシンプル)  人工知能ブームのメイン言語となり、流行した  1958年にJohn McCarthyによって「発見」される。 それ以来、たくさんの方言に分化  現在主流となっているのは、  Common Lisp  Scheme  Clojure  Emacs Lisp の4つ

Slide 8

Slide 8 text

Lispとは?  関数型プログラミング言語の原初  S式を使って式指向のプログラミング(そのため 非常にシンプル)  人工知能ブームのメイン言語となり、流行した  1958年にJohn McCarthyによって「発見」される。 それ以来、たくさんの方言に分化  現在主流となっているのは、  Common Lisp  Scheme  Clojure  Emacs Lisp の4つ

Slide 9

Slide 9 text

S式?  symbolic expression  Lispでは全てが式  S式という構文を使ってそれを表現  これによって後述の高度なメタプログラミン グを実現  ちなみにM式というものもあったが、今は使 われない

Slide 10

Slide 10 text

Lispとは?  関数型プログラミング言語の原初  S式を使って式指向のプログラミング(そのため 非常にシンプル)  人工知能ブームのメイン言語となり、流行した  1958年にJohn McCarthyによって「発見」される。 それ以来、たくさんの方言に分化した  現在主流となっているのは、  Common Lisp  Scheme  Clojure  Emacs Lisp の4つ

Slide 11

Slide 11 text

Lispとは?  関数型プログラミング言語の原初  S式を使って式指向のプログラミング(そのため 非常にシンプル)  人工知能ブームのメイン言語となり、流行した  1958年にJohn McCarthyによって「発見」される。 それ以来、たくさんの方言に分化した  現在主流となっているのは、  Common Lisp  Scheme  Clojure  Emacs Lisp の4つ

Slide 12

Slide 12 text

人工知能?  コンピュータに人間と同様の知能を持たせ ようという試み  人間の脳の働きを真似ることを本質とした場 合、その研究は、上手く行っているとは言い 難い  しかし、それらの研究成果は確実に私たち の身の回りで役立っている

Slide 13

Slide 13 text

Lispとは?  関数型プログラミング言語の原初  S式を使って式指向のプログラミング(そのため 非常にシンプル)  人工知能ブームのメイン言語となり、流行した  1958年にJohn McCarthyによって「発見」される。 それ以来、たくさんの方言に分化  現在主流となっているのは、  Common Lisp  Scheme  Clojure  Emacs Lisp の4つ

Slide 14

Slide 14 text

Lispとは?  関数型プログラミング言語の原初  S式を使って式指向のプログラミング(そのため 非常にシンプル)  人工知能ブームのメイン言語となり、流行した  1958年にJohn McCarthyによって「発見」される。 それ以来、たくさんの方言に分化  現在主流となっているのは、  Common Lisp  Scheme  Clojure  Emacs Lisp の4つ

Slide 15

Slide 15 text

今回の新入部員初等教育では、 そのうちの、Common Lispという方言 を主に教えます (方言間の差異はそれほど大きくはないので、どれか一つ 習得すれば、他は比較的簡単に習得できます) ※方言というのは、日本語に関西 弁、東京弁などあるように、基本的 にはその言語の文法に従っている が、細部において差異の見受けら れるもののこと

Slide 16

Slide 16 text

Common Lispとは?  数多あるLisp方言を統一する目的で開発され た  それまでに培われてきたLisp文化を受け継い でいる  ANSIで標準化  NASAでもCommon Lispによって作られたプロ グラムが認められた  GoogleにもITAというCommon Lispでのプロジェ クトで成功した会社が買収された(つまりGoogle もその価値を認めている)  抽象度の高いところから低いところまでカバー

Slide 17

Slide 17 text

Common Lispとは?  数多あるLisp方言を統一する目的で開発され た  それまでに培われてきたLisp文化を受け継い でいる  ANSIで標準化  NASAでもCommon Lispによって作られたプロ グラムが認められた  GoogleにもITAというCommon Lispでのプロジェ クトで成功した会社が買収された(つまりGoogle もその価値を認めている)  抽象度の高いところから低いところまでカバー

Slide 18

Slide 18 text

標準化?  ANSI(アメリカの標準化団体)によって標準化  標準化とは、要は文書によってそれが統一され ているということ。標準化されていることは、その 仕様が固まっており、より可搬性が高くなる  時代は移りゆくもの  特定の企業体や、財団法人などが開発する言 語なども多くありますが、仕様が簡単に変わりう る

Slide 19

Slide 19 text

Common Lispとは?  数多あるLisp方言を統一する目的で開発され た  それまでに培われてきたLisp文化を受け継い でいる  ANSIで標準化  NASAでもCommon Lispによって作られたプロ グラムが認められた  GoogleにもITAというCommon Lispでのプロジェ クトで成功した会社が買収された(つまりGoogle もその価値を認めている)  抽象度の高いところから低いところまでカバー

Slide 20

Slide 20 text

Common Lispとは?  数多あるLisp方言を統一する目的で開発され た  それまでに培われてきたLisp文化を受け継い でいる  ANSIで標準化  NASAでもCommon Lispによって作られたプロ グラムが認められた  GoogleにもITAというCommon Lispでのプロジェ クトで成功した会社が買収された(つまりGoogle もその価値を認めている)  抽象度の高いところから低いところまでカバー

Slide 21

Slide 21 text

抽象度?  抽象度が低いとハードに近いが、記述性は 下がる(つまり記述量が増えたりなど複雑化 する)  抽象度が高いと記述性が上がるが、ハード より遠い(つまり性能が確保しにくい)  Common Lispはその点で、抽象度の高いと ころ・低いところを広くカバーしており、強み である

Slide 22

Slide 22 text

ところで、なぜLispか?

Slide 23

Slide 23 text

Lispの成立  1958年、MITのJohn McCarthy教授によっ て「発見」される  当初、アルゴリズムの数学的記法であった のをコンピュータで実行可能なものにした  よって、その血筋は数学からである

Slide 24

Slide 24 text

Lispの強み  S式を使い、式のみで(=文を使わず)シン プルかつエレガントなプログラミング  マクロによる強力なメタプログラミング(=プ ログラムによるプログラミング)  動的型付けのため、型をあまり意識せずプ ログラミングすることができる  言語の核がシンプルなため、すぐに理解し、 実用することができる

Slide 25

Slide 25 text

すべての言語はLispに漸近する  かのLispハッカー、P. Grahamは言う、 「各言語は次第にLispに近付いてきている。」  どうして漸近するのか?(してるといえるのか?) → Lispが最良であるため、プログラミング言語がより良 くなりつつあると仮定するなら、そこに漸近すると考えら れます  Lispがもしあらゆるプログラミング言語の先を行って いるとしたら、それらの中で最も強力だとしたら、そ れを使わない理由があろうか?

Slide 26

Slide 26 text

すべての言語はLispに漸近する  かのLispハッカー、P. Grahamは言う、 「各言語は次第にLispに近付いてきている。」  どうして漸近するのか?(してるといえるのか?) → Lispが最良であるため、プログラミング言語がより良 くなりつつあると仮定するなら、そこに漸近すると考えら れます  Lispがもしあらゆるプログラミング言語の先を行って いるとしたら、それらの中で最も強力だとしたら、そ れを使わない理由があろうか?

Slide 27

Slide 27 text

いえ、ありません。

Slide 28

Slide 28 text

根拠は?  Lispが最も先を行っているという根拠はなんだ ろう? → 複数の言語を勉強してみると分かるようになる のだが、プログラミング言語の中にも流行というも のがあり、その中心をゆく言語は、どんどんとLisp に近づいていっています  最強のものがはっきりしているなら、それを使う べきだろう?

Slide 29

Slide 29 text

とりあえず実演? 質問等に答えつつ、適当に実演し たいと思います

Slide 30

Slide 30 text

参考にすべき文献  「ハッカーと画家」 Paul Graham (原著), 川合 史朗 (翻訳)  「Land of Lisp」 M.D. Conrad Barski (著), 川 合 史朗 (翻訳)  「実践Common Lisp」 Peter Seibel (著), 佐野 匡俊 (翻訳), 水丸淳 (翻訳), 園城雅之 (翻訳), 金子祐介 (翻訳)  「On Lisp」 Paul Graham (原著, 翻訳), 野田 開 (翻訳) ほか