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をいまいち分かってないんですが(笑))

「偽のゆとり教育」を受けた学生はどうなるのか

土曜日, 2月 9th, 2008

「真のゆとり教育」が生んだ18歳天才プログラマー
ゆとり教育で「情報」の授業が必修になりましたが、
私の高校ではレポート一枚で終わりました。
翌年、その事実が発覚して色々大変なことになりました。

     ____
   /      \
  /  _ノ    ⌒\  偽のゆとり教育というか、
/    (○)  (○) \  本物のゆとり教育を受けたやる夫はどうすればいいお…
|       (__人__)    |   アホプログラマーになれるのか…
/     ∩ノ ⊃  /   
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /

カッココッカにしてあげる♪【してやんよ】

            ___
       /      \
      /ノ  \   u. \     なんという歌…
    / (●)  (●)    \    やっぱりLispはネタが多いお…
    |   (__人__)    u.   |    京大にはLisper魔美なんてものもあるらしいし…
     \ u.` ⌒´      /    
    ノ           \    
  /´               ヽ  
 |    l              \
 ヽ    -一””””~~``’ー–、   -一”””’ー-、.
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))
       ____
     /      \
   /  _ノ  ヽ、_  \   世の中は広いお…
  /  o゚⌒   ⌒゚o  \  本を出したり、すごいモノつくってる人たちの中に混じって、
  |     (__人__)    | ゆとり世代の大学生がgauche.nightに出るのは
  \     ` ⌒´     /  無理があったかもしれないお…
            ’ー/.:.:.:.:.:.::::/.:.:.:.:.:.:/.://.:.:.:.:.:.:.:.:.:..:.:.:.:.:.:.:.:.\
            /.:.:./.:::::::/.:.:.:.:.∨.:/ ./.:.:.:.:.:.:.:.:.:.:.:.:.:.:./:.:.:.:.:.:.:ヽ
           /.:.:.:.:/.:.::::::::/.:.:.://X   ,’.:.::.:::.:.:.:.:.:.:.:.:.:.:/ :.:.:.:.:i::.:.:.∧
.         ー–イ.:.::::::::::,’.:.:; ‘    \i.:.:.::::.:.:.:.:.:./.:.::;イ:.:.:… ;    ’,
             /.::::::::/|.:./        !.:::::.:.:.:.:.:,イ.:.::/ |:.:.:.:.:.,’:..     i
              ,’::::::,イ::::::|イ  \    |::::.:.:.:./7ーrー-|–:./.:.:.:.:..  .;
         /i:::;イ::Y.::::::/    \   |:::.:/ //  .|.:.:./.:.:.:.:.:.:.:.:./
         ’´ |//:::,’::::::/  ̄ ̄ ̄   j/       |.:/.:.:.:.::.:.:.|:./
             //|.:::八 :::::::           ___ j/:..:.:.:::.:.:..j/ 大丈夫
      __/´ ̄_) 、 |.::::::∧   ___       \     /.:.:.:.:::::::::.:.:|  だってヴぁ!
      /_: :`: . 、  )ノ |:.::;:’.j/\ i´‘′`ヽ     \ /.:.:.:::::::;イ:.:.:;’  秘策が
.     /_: :`: : 、: :\)’r|.:/ / :¨`r_>、   ,!  ::::::::::: , ‘:.:::::::/|::|.::/  あるってヴァ!
   ,.ノ‐ 、`: :、: :\: :ヽj/ / : : /‐- 、` ¨i´‐rー–‐/.:::::::/_,ノ:.:|/
.  /    \: :\: :ヽ/.’ / : : /    .>’´: : :`ヽ/::.:::::;:イ:::/ヽ:::.:.|
 /        ヽ: : ヽ/: :i i : : ;’   /: : :;-r‐r=r-<´ |:/   \|        ____      /⌒  ⌒\     先輩、助かります!    /( ●)  (●)\    (この先輩は色々とすごいひとだお!   /::::::⌒(__人__)⌒::::: \   きっといい案があるに違いないお!)   |     |r┬-|     |     \      `ー'´     /                   / : : : : : : /: : : : : : : : : : : : : : : : : : \                 /: : : : /: : /| : : : : : : : : : : /: : : : : : : : : ヽ               /: : /: :/: :{/  | : : : : : : /: : /: : : :│: : : : : : '.           /: :〃: : :,': :.∧  |:l: : : : :./ | :ハ. : : : |: /: : : : : |         \  /// : : /l: :/ __\ハ: : : : / j/ _,斗: : :j/: : : : :l: :| .     ―‐-   /'´/⌒V:│;〃アf心ヾ: :Vー孑ゥ≠ミ: : / : : : : : l: | .    --―     /    V:l小. {ト イ| ∨   f{ノ::Ⅵ ∨: : : :.j: : :| | 「ゆとり代表」って     _, -'´   {     V: : } Vヒソ     |トーイソ/: : : : ∧.:.:|: | 書いたTシャツを           ∧      '; : { ''    ' -―v` ー〃: : : : : :/ヽ'; :|: :| 着とけば           レ ヘ、   ヽ:ゝ ._  f     )′: : : : : /_ノ: V|\| いいってヴぁ!             \  j/⌒\>ゝ .. _//:.: :/∨: :/\ |              `/     \ : : :_|厶-―< ^}/|/            __/  /    マ'弋\ `ヽ\  ∨           /   {  /   /  ∨ヘ    \\∧            (____`ー{ _,/    |川     \ヽ|        ____      /      \    /  _ノ  ヽ、_  \   /  o゚⌒   ⌒゚o  \  先輩はやっぱりすごいお・・・   |     (__人__)    |  涙がとまらないお…   \     ` ⌒´     / (この物語はフィクションです)

R6RSはポータブルじゃない

月曜日, 2月 4th, 2008

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

R6RS誤字(結末)

金曜日, 2月 1st, 2008

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

やる夫が変な夢をみたそうです

金曜日, 2月 1st, 2008

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ですが、捨てるのはさすがにもったいないですね。
というより、あれだけ苦労して作ったものを私には捨てることは出来ません。
捨てるぐらいなら、どこかで放流させたいですね(笑)