javascriptとlisp
DESCRIPTION
TRANSCRIPT
![Page 1: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/1.jpg)
JavaScriptとLisp
2010.06.19 #jstudy2010.06.20 加筆修正
@taiju
![Page 2: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/2.jpg)
自己紹介
var profile = { name : ‘Taiju Higashi’, twitter : ‘@taiju’, hatenaid : ‘id:jdg’, job : undefined};
![Page 3: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/3.jpg)
あと味http://d.hatena.ne.jp/jdg/
はじめての正規表現http://higashizm.sakura.ne.jp/reg/
はじめてのjQueryhttp://higashizm.sakura.ne.jp/jquery_first/
ブログ等
![Page 4: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/4.jpg)
目次
1. Lispとは?2. ブラウザにLispを載せるつもりだった3. 浮かび上がる真実4. Cの皮を被ったLisp5. それJavaScriptでできるよ6. まとめ
![Page 5: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/5.jpg)
目次
1. Lispとは?2. ブラウザにLispを載せるつもりだった3. 浮かび上がる真実4. Cの皮を被ったLisp5. それJavaScriptでできるよ6. まとめ
![Page 6: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/6.jpg)
Lispとは?■世界で2番目に古いプログラミング言語■関数型言語に分類される■丸括弧だらけで読みにくいとよく言われる■仕様が小さいのでいろんな実装(方言)がある■SchemeとCommon Lispが二大流派■今はGauche、Clojureが熱いらしい■Emacs使っている人にはおなじみ■Shibuya.lispというコミュニティがある■古いのに新しいという不思議な感じ
![Page 7: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/7.jpg)
全然説明になってないですね><
![Page 8: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/8.jpg)
目次
1. Lispとは?2. ブラウザにLispを載せるつもりだった3. 浮かび上がる真実4. Cの皮を被ったLisp5. それJavaScriptでできるよ6. まとめ
![Page 9: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/9.jpg)
ブラウザにLispを載せるつもりだった
原文Brendan's Roadmap Updates: Popularityhttp://weblogs.mozillazine.org/roadmap/archives/2008/04/popularity.html
訳文JavaScriptはSICPの影響を受けて開発したヤドカリデンキ商会(第一倉庫)http://d.hatena.ne.jp/yad-EL/20081002/p1
![Page 10: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/10.jpg)
JavaScriptの産みの親、ブレンダン・アイクさんの記事より
![Page 11: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/11.jpg)
Brendan Eich“I was recruited to Netscape with the promise of "doing Scheme" in the browser.
超意訳「Netscapeに入ればブラウザで Scheme(Lisp)がヤレると聞いて」
![Page 12: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/12.jpg)
Brendan Eich"Whether that language should be Scheme was an open question, but Scheme was the bait I went for in joining Netscape.
超意訳「むしゃくしゃしてやった、 答えは見つかっていない」
![Page 13: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/13.jpg)
ブレンダン・アイクさんは、Lispみたいな言語をブラウザに載せたかったようです。
![Page 14: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/14.jpg)
目次
1. Lispとは?2. ブラウザにLispを載せるつもりだった3. 浮かび上がる真実4. Cの皮を被ったLisp5. それJavaScriptでできるよ6. まとめ
![Page 15: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/15.jpg)
浮かび上がる真実
これらを調べていくうちに、私は、隠された”真実”を見つけてしまったのです。
![Page 16: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/16.jpg)
開発当初、”JavaScript”は“LiveScript”という名称で呼ばれていたことを思い出してください。
![Page 17: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/17.jpg)
LiveScript
![Page 18: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/18.jpg)
LiveScript
![Page 19: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/19.jpg)
Lispの文字が!!
![Page 20: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/20.jpg)
ここで浮かび上がった驚愕の真実は、JavaScript通の間ではアイク・コードという名称で呼ばれ
![Page 21: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/21.jpg)
ていません。
![Page 22: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/22.jpg)
目次
1. Lispとは?2. ブラウザにLispを載せるつもりだった3. 浮かび上がる真実4. Cの皮を被ったLisp5. それJavaScriptでできるよ6. まとめ
![Page 23: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/23.jpg)
Cの皮を被ったLisp原文The World's Most Misunderstood Programming Languagehttp://www.crockford.com/javascript/javascript.html
訳文世界で最も誤解されたプログラミング言語 - id:brazilhttp://d.hatena.ne.jp/brazil/20050829/1125321936
![Page 24: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/24.jpg)
JavaScript: The Good Partsの著者で、JSONの産みの親、ダグラス・クロックフォードさんの記事より
![Page 25: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/25.jpg)
Douglas Crockford"JavaScript's C-like syntax, including curly braces and the clunky for statement, makes it appear to be an ordinary procedural language. This is misleading because JavaScript has more in common with functional languages like Lisp or Scheme than with C or Java.
超意訳「JavaScriptはCに似てるとか言うのが 許されるのは小学生までだよねー」
![Page 26: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/26.jpg)
Douglas Crockford"It has arrays instead of lists and objects instead of property lists. Functions are first class. It has closures. You get lambdas without having to balance all those parens.
意訳「リストの代わりに配列があるし、 プロパティリストの代わりにオブジェクトがあって、 関数はファーストクラスだし、 クロージャもあるもの。 煩わしい括弧いらずでlambdaをGETできるよ。」
![Page 27: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/27.jpg)
ダグラス・クロックフォードさんも、JavaScriptとLispに多くの共通点があることを認識しているようです。
![Page 28: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/28.jpg)
目次
1. Lispとは?2. ブラウザにLispを載せるつもりだった3. 浮かび上がる真実4. Cの皮を被ったLisp5. それJavaScriptでできるよ6. まとめ
![Page 29: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/29.jpg)
それJavaScriptでできるよ
原文The Little JavaScripterhttp://www.crockford.com/javascript/little.html
![Page 30: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/30.jpg)
同じく、ダグラス・クロックフォードさん。The Little Schemerという名著(洋書)に触発されて、「それJavaScriptでできるよ」ってなことを言ってる記事。
![Page 31: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/31.jpg)
Douglas Crockford"JavaScript has much in common with Scheme. It is a dynamic language. It has a flexible datatype (arrays) that can easily simulate s-expressions. And most importantly, functions are lambdas.
意訳「JavaScriptはScheme(Lisp)にすごく似てる。 ダイナミックだし、配列でS式の表現できるし、 そもそもfunction=lambdaってのが重要だよね。」
![Page 32: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/32.jpg)
(define foo (lambda (a b c) (body)))
![Page 33: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/33.jpg)
それJavaScriptでできるよ
![Page 34: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/34.jpg)
Lisp (define foo (lambda (a b c) (body)))
JavaScript var foo = function(a, b, c) { return body; };
![Page 35: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/35.jpg)
(foo a b c)
![Page 36: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/36.jpg)
それJavaScriptでできるよ
![Page 37: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/37.jpg)
Lisp (foo (a b c))
JavaScript foo(a, b, c)
![Page 38: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/38.jpg)
(cond (p1 e1) (p2 e2) ... (else en))
![Page 39: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/39.jpg)
それJavaScriptでできるよ
![Page 40: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/40.jpg)
Lisp (cond (p1 e1) (p2 e2) ... (else en))
JavaScript p1 ? e1 : p2 ? e2 : en
![Page 41: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/41.jpg)
(and p1 p2 ... pn)(or p1 p2 ... pn)
![Page 42: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/42.jpg)
それJavaScriptでできるよ
![Page 43: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/43.jpg)
Lisp (and p1 p2 ... pn) (or p1 p2 ... pn)
JavaScript (p1 && p2 ... && pn) (p1 || p2 ... || pn)
![Page 44: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/44.jpg)
(quote (a b c)) (quote (a . (b . (c . nil))))
![Page 45: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/45.jpg)
それJavaScriptでできるよ
![Page 46: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/46.jpg)
Lisp (quote (a b c)) (quote (a . (b . (c . nil))))
JavaScript [‘a’, [‘b’, [‘c’]]
![Page 47: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/47.jpg)
LispのコードはJavaScriptで再現することができるようです。
![Page 48: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/48.jpg)
目次
1. Lispとは?2. ブラウザにLispを載せるつもりだった3. 浮かび上がる真実4. Cの皮を被ったLisp5. それJavaScriptでできるよ6. まとめ
![Page 49: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/49.jpg)
まとめ
JavaScriptはLispに似て、すごく柔軟で強力な言語になりました。JavaScriptにLispの特徴を取り入れたのは
大成功だったように思います。
![Page 50: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/50.jpg)
JavaScriptに限らずLL言語全般に言えることですが、
![Page 51: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/51.jpg)
特にJavaScriptは、なんだかんだで関数が肝だし、スコープの単位は関数です。クロージャや無名関数を多用するところはLispの文化を色濃く継承しているように思います。
![Page 52: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/52.jpg)
Lispを学ぶと、JavaScriptにおける”納得”や”発見”を得られるのではと思います。
![Page 53: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/53.jpg)
今日は父の日ですね
![Page 54: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/54.jpg)
ブレンダン・アイク(お父)さん、こんな素晴らしくて楽しい言語を産んでくれてありがとう!!
![Page 55: JavaScriptとLisp](https://reader033.vdocuments.us/reader033/viewer/2022051818/54bc89444a7959163e8b45a1/html5/thumbnails/55.jpg)
ご清聴ありがとうございました。