2009-01-01から1年間の記事一覧

帰省

30日から実家へ帰省。この正月休みはGauche本を読み進める絶好の機会だ。ただ、実家にネットがないのが難点。日記更新できない><

テスト

10章「テストと例外処理」のうち、テストに関する箇所をば。 手続きtest* ちなみに、test* は以下でも出てきた。 id:yagiey:20090307:1236410685 id:yagiey:20090321:1237653683 評価結果が○○と等しくなるはずだ!ってな感じで、次のように使う。 gosh> (use…

こんなの見つけた

はてなようせいとまなぶ R5RS表示的意味論 必要になったら読んでみよう。 いつになることやら...。

R5RS読んでて分からない言葉や文章など

ヨムヨム詐欺で終わっていたR5RSをちょっと読んでみた。もちろん日本語訳の方ね! R5RS (Revised^5 Report on Algorithmic Language Scheme) 日本語訳 http://www.schemers.org/Documents/Standards/R5RS/ 3章まででも分からないこと多すぎ。10ページ足らず…

λ式とクロージャ

クロージャって何だろう? lambda式とどう違うんだろう?

lambda式って何だろう

C#

id:yagiey:20080204:1202147003の内容の続きっぽいけど... // C#2.xにはFunc<T>が無い delegate TRet Func<TRet>(); // 匿名メソッドのテスト static void NotExpected() { // 手続きを作成 List<Func<int>> procs = new List<Func<int>>(); for (int i = 0; i < 5; i++) procs.Add(delega</func<int></func<int></tret></t>…

トップレベルじゃないところで再定義

再定義って言っていいのかわからんけど。 gosh> (let ((car cdr)) (car '(foo bar baz))) (bar baz) gosh> (let ((car cdr)) (define first (lambda (l) (car l))) (first '(foo bar baz))) (bar baz) gosh> (car '(foo bar baz)) foo この前のfirstの結果と…

リテラルで書けないオブジェクト

手続きなどのリテラルが書けないものは、名前をつけて捕まえておかないと、参照できなくなってしまう。 だから、consやらlambdaやらは「定義によって設定されたものでないトップレベルのバインド」(id:yagiey:20091116:1258342949のコメント参照)にしない…

束縛されているかどうか

昨日、add-nをdefineするときにエラーにならなかった。 何故なのか、ド素人なりに考えてみた。 lambda式を評価して手続きオブジェクトを作成するとき、出現した変数が束縛されているか否かは、トップレベルまで見に行けば決定できる。 (define mul (lambda (…

手続きオブジェクト

defineを実装して、lambdaやらquoteやらも再定義可能にするには、手続きオブジェクトの内部表現を考えないと駄目だ、という結論に達した。 たとえば、 gosh> car #<subr car> とかいうやつ。 #で始まる値はリテラルで表現できないものらしい(id:yagiey:20090129:12332</subr>…

銀メダル獲得!

はてダ書き始めてちょうど100日目らしく、はてなダイアリー市民のアイコンが銀に! ...で、何が嬉しいんだろう?単なる気持の問題?

気になったので実験

ちょっと気になったことを実験してみた。 実験1:defineで名前をつけるとき、2つ目の引数は評価されるのか? gosh> (define add-n (lambda (m) (+ m n))) add-n gosh> (add-n 1) *** ERROR: unbound variable: n Stack Trace: _____________________________…

今後の課題

今回作ったevalだと、defineが無いから名前をつけられない。 defineでテーブルにエントリを追加しなきゃダメだなぁ。 あと、defineでテーブルに追加しても、現時点では以下のものはテーブルから探さずに、決まった処理してるので、再定義ができない。 lambda…

evalできた

evalはちゃんと勉強してから作りたかったけど、やっぱり気になって仕方がないので作ってみた。 データ構造(リストとアトム) 主要な手続き(consやcarやcdrなど) を定義して、あとはThe Little Schemerのvalue(id:yagiey:20081105以降)をそのままC#に移…

後はeval

字句解析、構文解析、S式の出力を実装出来たので、REPLの「R」と「P」はできたことになる(のか?) ってことで、あとはエヴァりたい。むしろヱヴァりたい。 ...でも、やっぱ本を進めたい。 ってことで、少し暖めておく。 早くSICP読みたいし。 積読書は堆く…

9章おしまい

9章の最終節、8節「グラフ」。 今までプレイヤーのHPやら持ち物を操作する手続きを作ってきた。 その中に、現在位置を更新する手続きset-position!も定義してみたが、positionが保持する値の意味は規定していなかった。 ということで、positionを使って、動…

構文解析できた

俺LISPを少しずつ作っている。とりあえず、構文解析まではできた。 受理する構文をBNF的に書くと、以下の通り。 <expr> ::= <atom> | <list> <atom> ::= <identifier> | <string> | <number> | <boolean> <list> ::= <open_paren> [<expr>+ [<dot> <expr>]] <close_paren> ただし、それぞれ はS式 はアトム は識別子 は文字列 は数値 は真理値 はコンスセルまたは空リスト は</close_paren></expr></dot></expr></open_paren></list></boolean></number></string></identifier></atom></list></atom></expr>…

リストとツリー

今、無謀にも、なんちゃってSchemeをC#で実装しようと試みているところ。 まだ字句解析器しかできてないけど。ヽ(´Д`;)ノ アゥア 切り出したトークンの並びをチェックしつつ、リストを構成するのは今から。 構文解析器って言うのかな? マクロはまだ自分が理解…

コード補完

意味の上でのある程度のまとまりごとに、名前をドットで区切ってやれば、名前の衝突は防止できるな。 まぁ、単なる文字列なので、その「意味」に当たる部分は、プログラマの頭の中だけにしか無いけど。 名前の衝突を防止の他に、コード補完によるコーディン…

名前をまとめる何か

item-properties item-property-get get-player-attr update-player-attr! たった4つの手続きなのに、もうだめだ。 全ての名前が平等で、のっぺりとしたイメージが気持ち悪い。 クラスや名前空間など、名前をまとめる何かが欲しくなるな。 じゃぁ、作れば?…

準クォート

リテラルデータに手続きを埋め込むにはちょっとした工夫が必要です。 ということだが、手続きに関わらず、評価済みの値を埋め込む場合一般的に言える話ですな。 gosh> (define foo '(hoge . (lambda (n) (+ n 1)))) foo gosh> foo (hoge lambda (n) (+ n 1))…

好きな音楽

J-Pop/J-Rock → HR/HM → Blues、Classic → Post Rock こんな感じ。 もちろん、以前好きだった音楽が嫌いになった訳じゃない。Jimmy Lavalleのエレピが好き。 できるだけ食わず嫌いはしたくないが、あんまり聞いたことがないジャンルもたくさん。

シンボルって何よ?

Schemeをいじりはじめて1年くらいかな(つんどく期間を除いて)。 まだまだ分からないことだらけ。 その一つが、シンボル。 http://karetta.jp/book-node/gauche-hacks/023107で紹介されているFizzBuzzのソースコードだけど、ぼけーっと読んでて気づいたこと…

多値をreceiveで受け取らなかったら

114ページからの「手続きによるパターンの抽象化」を読み返しているとき、ふと不思議に思ったことがある。 それは、手続きtraverseを使ったmember2の定義内での、valuesの使い方。 ;; traverseを用いない (define member2 (lambda (elt lis . opt) (let-opti…

delete-1

さて、半年つんどくしていました「プログラミングGauche」。 続きからやろうと思ったら「今まで何やってたっけ?」っていう感じだったので、9章の始めからつらつらと読んでた。 で、つまずいてたdelete-1のnon-copyバージョンを書いてみると、割とすらすらと…

Carbon Emacs

LeopardからSnow Leopardにアップグレードしたら、Carbon Emacsが動かなくなったという話をちらほら耳にする。 ん?僕はちゃんと使えてるけどなぁ。 ただ使い込みが足りずに、問題が表面化していないだけかもしれないけど。

WindowsでGauche

WindowsでGaucheやるには、おそらくGaucheboxが一番お手軽。 以下よりダウンロード、インストール。 http://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3AGauchebox

MacでGauche

ご無沙汰してます。Schemeはあれから全く進んでません。ヽ(´Д`;)ノアゥア つんどくYeah!!!!6月にMacbook Pro 13インチを買ったので、今更ながらMacでのScheme開発環境構築(Gauche + emacs)に関して覚え書き。大まかな流れは、 X11のインストール XCodeのイン…

ここらでひと息

もうすぐ9章がおわる。 章の見出しから判断すると、今後の話題で僕が一番興味を引かれるのは11、18、19章だなぁ。 11章はThe Little Schemerの10章と関連する話題のような気がする。 「プログラミングGauche」は、SICPを読むに当たってSchemeの初歩的なこと…

一般化set!、その2

確か、121ページまで終わってたはず。 9章6節、「リストの変更と一般化set!」の続き。 HPの取得と変更は、get-itemとadd-item!にならって、次のように書ける。 ;; HPの値を取得 (define get-hp (lambda (player) (cdr (assoc 'hp player)))) ;; HPの値を変更…