Archive for the ‘雑記’ Category

クロージャを教えるのは苦労じゃ

火曜日, 2月 12th, 2008

大学に入ってすぐの頃、「クロージャって何ですか」と聞いたときの返答がこれでした。
そのときはCのstaticな変数と同じようなものかと理解したけど、
今思うと遠いような近いような……

R6RSという奴は…

日曜日, 2月 10th, 2008

R6RSではR4RSで登場したsyntax-caseが復活すると聞いていました。
確かに、R6RSの9.2節に
「syntax-caseでもdatum->syntaxを使わなければ衛生的なマクロが定義できる(12.6節参照)」
という説明がありましたが、syntax-caseという言葉が登場するのは恐らくそこだけで、
おまけに、R6RSは11章までしかありませんでした。
でも、よく見てみたら参照と書いてあるのは、標準ライブラリ(*)の12.6節でした。
R6RSの本体が90ページ(付録を除いても60ページ)もあるのに、
標準ライブラリの説明も70ページもあります。
英語がろくに読めない私にはあまりにも過酷です。
仕様書が薄いのがSchemeの特徴だったはずじゃ……
(*) Revised6 Report on the Algorithmic Language Scheme — Standard Libraries
—-
でも、syntax-caseが仕様に戻ったというのは嬉しいです。
syntax-ruleだけじゃ、私には使いこなせない気がするからです。
というのも、去年の夏休み、Common Lispでyaccもどきを作ったんです。
ただ、yaccのようにファイルに記述したBNFを読み取ってソースを吐き出すのではなく、
S式として記述してあるBNFを入力とし、Lispのプログラムを吐き出すマクロとして作りました。
例えば、次のような文法の構文解析器を生成したいとします。

EE+T
ET
TT*F
TF
F→<E>
F→i

この場合は、次のように書きます。
(ここでは、構文解析と同時に計算もするものを作ってます)

(setf (symbol-function 'parser)
(make-parser (E (E '+ T) (+ $1 $3)
(T) $1)
(T (T '* F) (* $1 $3)
(F) $1)
(F ('< E '>) $2
('i) $1)))

そしたら、こんな関数が作られます。


#<CLOSURE :LAMBDA (#:G267)
(LET ((#:G266 '(#:G253)) (#:G268 (POP #:G267)))
(LABELS
((#:G265 (#:G269)
(IF (EQ #:G268 '#:G252) (CAR #:G267)
(CASE #:G269
((#:G264)
(CASE #:G268
((#:G230)
(LET (($1 NIL))
(SETF $1 (PROGN (POP #:G266) (POP #:G266) (POP #:G266)))
(LET ((#:G292 (CAR #:G266))) (PUSH #:G268 #:G267) (SETF #:G268 'T)
(PUSH $1 #:G267) (#:G265 #:G292))))
((*)
(LET (($1 NIL))
(SETF $1 (PROGN (POP #:G266) (POP #:G266) (POP #:G266)))
(LET ((#:G291 (CAR #:G266))) (PUSH #:G268 #:G267) (SETF #:G268 'T)
(PUSH $1 #:G267) (#:G265 #:G291))))
(以下略)

まあ、正直いいものとは言いがたいのですが、
とりあえず、動くものを作ることができました。
けど、実はCommon Lispのマクロをまともに使ったのはこれが初めてでした。
それでも問題なく書けたのは、マクロを使ったといっても、それは最初に入力を受け取る箇所だけで、
後は普通にLispの関数を書きなぐっただけだったからです。
だから、ボトムアップに開発を進めることができて、
関数単位でテストができたので、Cなんかで同じものを作るよりも、
圧倒的にデバッグが楽だったと思います。
しかし、これをR5RS通りのsyntax-caseがないSchemeで作ろうとすると、
syntax-ruleでマクロを書く必要があり、
syntax-ruleでは展開コードはテンプレートで記述する必要があり、
テンプレートからは普通のSchemeの関数を呼び出したりはできないので……
と、考えただけでも恐ろしいことになりそうです。
という訳で、Schemeを使ってマクロ展開コードを生成できるsyntax-caseが
復活したことに私は賛成です。(といっても、syntax-caseをいまいち分かってないんですが(笑))

R6RSはポータブルじゃない

月曜日, 2月 4th, 2008

R6RSを印刷すると紙の枚数が多くなる。
非常に重い。
持ち運びに不便。
ポータブルじゃない。

R6RS誤字(結末)

金曜日, 2月 1st, 2008

以前の日記で、R6RSに誤字がある?
と書いたのですが、R6RSの中の人に
「これって誤字ですか?」
とメールを送ってみたところ
「その通りだ」
って返事が返ってきました。
少しSchemeコミュニティに貢献した気分になれました。

R6RS誤字?

水曜日, 1月 30th, 2008

R6RSの4.1. Notationに次のような記述があるんですが、

Some non-terminal names refer to the Unicode scalar values of the same name: <character tabulation> (U+0009), <linefeed> (U+000A), <carriage return> (U+000D), <line tabulation> (U+000B), <form feed> (U+000C), <carriage return> (U+000D), <space> (U+0020), <next line> (U+0085), <line separator> (U+2028), and <paragraph separator> (U+2029).

carriage returnが2回でてきます。
誤字かと思いErrataを見てみたんですが、まだないようです。
これって単なる誤字なんですかね。

やる夫がgauche.nightの第1部座談会に出演するそうです

日曜日, 1月 27th, 2008
       ____
     /      \
   /  _ノ  ヽ、_  \
  /  o゚⌒   ⌒゚o  \  もう試験間近だお…
  |     (__人__)    |  きっと単位沢山落とすお…
  \     ` ⌒´     /
            / ̄ ̄\ 
          /   _ノ  \
          | し ( ●)(●)
          |     (__人__)  お前、ソフトウエア演習の授業出てないだろ
             |     ` ⌒´ノ  課題はネットで外から出せるようになってるけど、
              | し       }   先生に直接見せないと未提出扱いらしい
              ヽ        }   早く先生のとこ行ってきたほうがいいぞ
            ヽ、.,__ __ノ
   _, 、 -― ””::l:::::::\ー-..,ノ,、.゙,i 、
  /;;;;;;::゙:’:、::::::::::::|_:::;、>、_ l|||||゙!:゙、-、_
           ____
       /::::::::::::::::\
      /::::::─三三─\
    /:::::::: ( ○)三(○)\  
    |::::::::::::::::::::(__人__)::::  | 今までそんなことなかったって聞いてたのに…
     \:::::::::   |r┬-|   ,/  そうか、新しい先生が授業やってるんだったお!!!!
    ノ::::::::::::  `ー’´   \ 
  /:::::::::::::::::::::            
 |::::::::::::::::: l   
       ____
     /      \
   /  _ノ  ヽ、_  \
  /  o゚⌒   ⌒゚o  \  もう何もする気も起こらないお…
  |     (__人__)    |  色々と終わったお…
  \     ` ⌒´     /
            , ‘´  ̄ ̄ ` 、
          i r-ー-┬-‐、i
           | |,,_   _,{|
          N| “゚’` {“゚`lリ  そこの、ボーイ!!
             ト.i   ,__”_  !   gauche.nightの第1部座談会に出演しないかい?
          /i/ l\ ー .イ|、    出演者の方はチケット購入の必要ないよ!
    ,.、-  ̄/  | l   ̄ / | |` ┬-、 
    /  ヽ. /    ト-` 、ノ- |  l  l  ヽ.
  /    ∨     l   |!  |   `> |  i
  /     |`二^>  l.  |  | <__,|  |
_|      |.|-<    \ i / ,イ____!/ \   .|     {.|  ` - 、 ,.---ァ^! |    | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄l __{   ___|└―ー/  ̄´ |ヽ |___ノ____________|   }/ -= ヽ__ - 'ヽ   -‐ ,r'゙   l                  | __f゙// ̄ ̄     _ -'     |_____ ,. -  ̄ \____|   | |  -  ̄   /   |     _ | ̄ ̄ ̄ ̄ /       \  ̄| ___`\ __ /    _l - ̄  l___ /   , /     ヽi___.|  ̄ ̄ ̄    |    _ 二 =〒  ̄  } ̄ /     l |      ! ̄ ̄| _______l       -ヾ ̄  l/         l|       |___|      ____         /      \        /  ─    ─\    (gauche.night? /    (●)  (●) \    それって結構有名イベントだお… |       (__人__)    |    なんで声が掛かったのかさっぱり分からないけど /     ∩ノ ⊃  /      声が掛かったってのはきっと名誉なことだお) (  \ / _ノ |  |      .\ “  /__|  |     \ /___ /             / ̄ ̄\           /   _ノ  \  ■ gauche.nightとは           |    ( ●)(●)  書籍「プログラミングGauche」が刊行されるのを           |     (__人__)  記念して開かれるイベント。              |     ` ⌒´ノ  SchemeとGaucheとλとS式を愛するすべての人の               |          }   ためのイベントだとのこと。               ヽ        }   しかし、この説明で分かるような人は             ヽ、.,__ __ノ   そもそもこれの存在を知ってるだろうと    _, 、 -― ''"::l:::::::\ー-..,ノ,、.゙,i 、  つっこまざるをえない。   /;;;;;;::゙:':、::::::::::::|_:::;、>、_ l|||||゙!:゙、-、_
       ____
     /⌒  ⌒\
   /( ●)  (●)\    はい、参加したいお!何をするか教えて欲しいお!
  /::::::⌒(__人__)⌒::::: \   (本来1500円のチケットがタダってのは魅力的だお!)
  |     |r┬-|     |
  \      `ー’´     /
            , ‘´  ̄ ̄ ` 、
          i r-ー-┬-‐、i
           | |,,_   _,{|
          N| “゚’` {“゚`lリ   R6RSを肴にしてみんなで飲む会だよ!
             ト.i   ,__”_  !   それで参加してもらえるかい?
          /i/ l\ ー .イ|、    
    ,.、-  ̄/  | l   ̄ / | |` ┬-、 
    /  ヽ. /    ト-` 、ノ- |  l  l  ヽ.
  /    ∨     l   |!  |   `> |  i
  /     |`二^>  l.  |  | <__,|  |
_|      |.|-<    \ i / ,イ____!/ \   .|     {.|  ` - 、 ,.---ァ^! |    | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄l __{   ___|└―ー/  ̄´ |ヽ |___ノ____________|   }/ -= ヽ__ - 'ヽ   -‐ ,r'゙   l                  | __f゙// ̄ ̄     _ -'     |_____ ,. -  ̄ \____|   | |  -  ̄   /   |     _ | ̄ ̄ ̄ ̄ /       \  ̄| ___`\ __ /    _l - ̄  l___ /   , /     ヽi___.|  ̄ ̄ ̄    |    _ 二 =〒  ̄  } ̄ /     l |      ! ̄ ̄| _______l       -ヾ ̄  l/         l|       |___|      ____         /      \        /  ─    ─\    (R6RS? /    (●)  (●) \    Schemeの新しい仕様だお… |       (__人__)    |   そもそも古い仕様もあまり知らないお) /     ∩ノ ⊃  /     (  \ / _ノ |  |      .\ “  /__|  |     \ /___ /        ____      /⌒  ⌒\    /( ●)  (●)\     (でも誘ってもらったのに断るのは悪いお!   /::::::⌒(__人__)⌒::::: \     R6RSも今から読めばなんとかなるはずだお)   |     |r┬-|     |   \      `ー'´     /          ____         /\  /\       /( ●)  (●)\      / :::::⌒(__人__)⌒:::::\       |     |r┬-|       |       \     ` ー'´     /      /          \       | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |  トン    _(,,) ぜひとも      (,,)_   /  |   参加させて     .|  \ /    |       欲しいお   .|    \     .|__________|             , '´  ̄ ̄ ` 、           i r-ー-┬-‐、i            | |,,_   _,{|           N| "゚'` {"゚`lリ   了解したよ。              ト.i   ,__''_  !   公式サイトを更新して、           /i/ l\ ー .イ|、    ブログのほうにも書いておいたよ。     ,.、-  ̄/  | l   ̄ / | |` ┬-、      /  ヽ. /    ト-` 、ノ- |  l  l  ヽ.   /    ∨     l   |!  |   `> |  i
  /     |`二^>  l.  |  | <__,|  |
_|      |.|-<    \ i / ,イ____!/ \   .|     {.|  ` - 、 ,.---ァ^! |    | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄l __{   ___|└―ー/  ̄´ |ヽ |___ノ____________|   }/ -= ヽ__ - 'ヽ   -‐ ,r'゙   l                  | __f゙// ̄ ̄     _ -'     |_____ ,. -  ̄ \____|   | |  -  ̄   /   |     _ | ̄ ̄ ̄ ̄ /       \  ̄| ___`\ __ /    _l - ̄  l___ /   , /     ヽi___.|  ̄ ̄ ̄    |    _ 二 =〒  ̄  } ̄ /     l |      ! ̄ ̄| _______l       -ヾ ̄  l/         l|       |___|      ____    /      \   /  _ノ    ⌒\  なんか瞬時に後戻りできなくなったお /    (○)  (○) \  とにかくR6RS読まないとまずいお・・・ |       (__人__)    |   それ以前にSchemeあまり触ってないし・・・。 /     ∩ノ ⊃  /    (  \ / _ノ |  | .\ “  /__|  |   \ /___ /       ____      /⌒  ⌒\    /( >)  (<)\      /::::::⌒(__人__)⌒::::: \    まあ、3月だしまだまだなんとかなるお!   |    /| | | | |     |    地味に勉強すれば大丈夫なはずだお!   \  (、`ー―'´,    /          / ̄ ̄\     /ノ( _ノ  \                  | ⌒(( ●)(●)    勉強? それ以前に試験の勉強しろ!     .|     (__人__)     授業サボってる奴が試験前に勉強しなかったら            |     ` ⌒´ノ      確実に単位落とすだろ!     / ⌒ヽ     } =つ≡つ=つ≡つ=つ≡つ    /  へ  \   }≡つ=つ≡つ=つ≡つ=つ  / / |      ノ  =つ≡つ=つ≡つ=つ≡つ ( _ ノ    |      \≡つ=つ≡つ=つ≡つ=つ        ____      /      \    /  _ノ  ヽ、_  \   /  o゚⌒   ⌒゚o  \  試験のことを忘れてたお…   |     (__人__)    |    \     ` ⌒´     / (この物語はフィクションです)

お久しぶりです

水曜日, 10月 10th, 2007

実に3ヶ月ぶりでしょうか。
お久しぶりです。zickです。
本日、およそ半年ぶりにリリカルLispのソースをいじくりました。
大したことはしてないのですが、かなり戸惑いました。
NScripterの文法もかなり忘れ、悲しい限りです。
日記を書いてない三ヶ月間にも色々ありまして、
カップヌードルをずっと食べていなかったり、
かといって、それほどいい食生活を送っているわけでもなく、
試験前に欲しいゲームが発売して見事に単位を落としたり、
Erlangの勉強をしようと本を買って勉強していたり、
けれども、英語を読むのが遅くて時間が掛かったり……
まあ、あんまり面白くないのでこれくらいにしておきます(笑)
話は変わりますが、ほとんど更新してないのに足を運んでくれる皆様のために、
そろそろ何か少し大きいことでもやろうかと思います。

λ出没注意

火曜日, 7月 3rd, 2007

やはり、京都といえばλですね。
こんばんは。zickです。
lambda
さて、リリカルLisp通販も、あと数日で終了ですが、
結局大量に在庫が残っており、いまだに私の下宿の一部を占有しています。
大量に余った本とCDですが、捨てるのはさすがにもったいないですね。
というより、あれだけ苦労して作ったものを私には捨てることは出来ません。
捨てるぐらいなら、どこかで放流させたいですね(笑)

gauche.night行きたかった……

金曜日, 5月 11th, 2007

毎度のことながら、zickです。
通販の方ですが、結構反応がいいみたいです。
同人とかとは縁がなくても興味がある方は結構いたみたいです。
やっぱし通販やってよかったと思いました。
さて、Lisperの間で話題となったgauche.night
私は残念ながら行けなかったのですが、小黒様のプレゼンの中で、
リリカルLispのスクリーンショットを使っていただきました。
とはいえ、どんな風に使っていただいたのかさっぱり分かってません。
そのときの写真とか撮られた方がいらっしゃいましたら、こっそり見せてください(笑)