Shibuya.Lisp20091107View more documents from higepon.
わからない…… わからない…… R6RSのAppendix Aに載っている形式的意味論がわからない…… Schemeの形式的意味論を理解するための冒険は、 R6RSを印刷して読みながら、実際にPrologとかで、 意味論にそったインタプリタを作ることよ わからない…… そんな面倒なことをする意味があるのかわからない…… 本当にそれで理解できたのかは筆者もわからない…… それじゃあ、簡単に説明をするからよく聞いてね。 けど、それでもR6RSを印刷したほうがいいわ。 それから、R6RSは「みんなもってる」ものなので、 自分のものだと分かるように、ちゃんと名前を書かないとだめよ。 「おなまえシール」を貼るというのも手ね。 もくじ なにをするの おおざっぱに もうすこしせいかくに きほん かきかえ むずかしいかきかえ ぶんぽう やくそくときほん ぷろぐらむのぶんぽう ぶんみゃくとあな ぶんみゃくの
最もタメになる「初心者用言語」は Python! - 西尾泰和のはてなダイアリー Schemeなら、えんざんしとかえんざんしのゆうせんじゅんいとかいんでんととか小難しくてよくわらないものがないから、初心者でも安心して簡単にできるよ > < しかもしかも、ループと再帰呼び出しとか2つもいっぺんに覚えなくても、末尾呼出し1つだけ覚えれば両方できちゃうよ!Schemeすごい! Schemeで豊かな表現力を身につける なんだかよくわからないけど、巷のプログラミング言語は * とか - とか ? が変数名とか関数名につかえない。演算子?なにそれ初心者には難しくてわかんない>< Schemeだったら、「それってシンボル?」って聞く関数は symbol? っていう名前にできるよ。 is_symbolとかわかりにくいよね!!!アンダーバーとかタイプしにくくて初心者向けじゃないし!!! 参照透明できれいな心
shiro さんが開発されている Scheme 処理系 Gauche 0.8.12 の最適化処理を勉強のためにまとめました。 よく Gauche のコードは宝の山だと聞きますが、その一端を分かってもらえるとうれしいです。 基本的にGaucheのコードのコメントをまとめただけです。 Scheme のソースコードと簡単な英語が読める人はこのまとめを読むより src/compile.scm を直接読んだ方が正確に理解できると思います。 前提1 コンパイルと実行の流れ Gauche はスタックマシン型の仮想マシンでコードを実行します。 そのため Scheme のコードはスタックマシンで実行可能なコードにコンパイルされます。 つまり Scheme のコード →(コンパイル) マシンコード →(実行) 結果 という流れでコードが実行されることになります。 今回取り上げる、最適化は上の流れの「コンパイル
ちょっと息抜きに Scheme の勉強。人のコード読み 文字列に a という文字が含まれるか (define (has-a? string i) (and (>= i 0) (or (eqv? (string-ref string i) #\a) (has-a? string (- i 1))))) (has-a? "hoge" 3) ; => #f (has-a? "fuga" 3) ; => #t (define a "hoga") (has-a? a (- (string-length a) 1)) ; => #t JS に直すと function has_a(string, i) { return i >= 0 && (string[i] == "a" || has_a(string, i - 1)); } なるほどー。 やはり、文化が違うと書き方が違うなあ。 再帰再帰で頭が><
どう書く?orgのライフゲームのお題(http://ja.doukaku.org/126/)をGauche(Lispの一種であるSchemeの処理系)で実装している過程を動画にしてみました。Lispを知らないと何やっているのかよく分からないと思いますが、ひたすら「関数を書いては実行」を繰り返してプログラムを作っていっています。実装時間は40分くらいかかっていますが、動画では早送りで7分ちょっとに圧縮しています。なお、BGMはsm982882よりお借りしました。また、動画で使用しているフォントはあずきフォント(http://key.milkcafe.to/azuki/font/index.html)です。
昨日は、1000speakers の第1回のイベントがありました。1次会は Ustream にて参加し、2次会から現地で参加しました。 2次会でSICP読書会の話で盛り上がり、水曜日の読書会に参加しようと言うことになり、amachang など数名の方々に色々と Scheme の書き方を教えてもらいました。 3次会が楽しかったです!23:30頃からサイボウズラボにて3次会が始まったんですが、僕が、せっかく教えて頂いたので、Scheme の実装を JavaScript で始めたら、西尾くん(id:nishiohirokazu)と id:amachang が参加し始め、実装大会となりました。 その5時間の成果が、http://goldenscheme.accelart.jp/ です。 全員、基本文法は実装できました!! 処理系を実装するに当たり、言語を問わず、一般論として、難しいのは2カ所です。
最近一部で盛り上がっている「末尾再帰」について自分の理解を確認するのも兼ねて書いてみます。 (そもそも自分がふったのがきっかけっぽいので)。 上級者の方は間違い等に厳しくつっこんでもらえると助かります:-) 背景 自分が末尾再帰を知ったのは多分Schemeの勉強を始めた頃だったと思います。 例えばSICPという本では20ページあたりにこっそりと出てきます。 そのころの理解はかなり浅いもので「ふーん。」程度でした。 さて後日Schemeの処理系を実装することになりR5RSというSchemeの仕様書を読んだところ Scheme の実装は真正に末尾再帰的(properly tail-recursive) であることが要求されている。これは,たとえ繰返し計算が 構文的に再帰的手続きで記述されているときでも,定数空間 でその繰返し計算を実行することを可能にする とあり末尾再帰のことを詳しく知る必要性
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く