Archive for 1月, 2008

括弧と角括弧

木曜日, 1月 31st, 2008

R6RSで角括弧が同義語になったって書いてますが、
どうもリストの場合だけであって、ベクタは違うようです。

<list> → (<datum>*) | [<datum>*]
    | (<datum>+ . <datum>) | [<datum>+ . <datum>]
    | <abbreviation>
<vector> → #(<datum>*)

gaucheではどうなんだろうと思い、試してみたところ

gosh> #[1 2 3]
#[ 1-3]
gosh> (vector? #[1 2 3])
#f

なんだかよく分からないけど、ベクタじゃないということだけは分かりました。

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を見てみたんですが、まだないようです。
これって単なる誤字なんですかね。

R6RSに登場する言語

水曜日, 1月 30th, 2008

zickです。
R6RSを読んでいると、ふと思ったのですが、
「これは○○言語などと同様である」といった感じで登場する、
Scheme以外の他のプログラミング言語の数が、
R5RSと比べて増えている気がしました。
で、気になったので各言語の登場回数を数えて見ました。
(ただし、謝辞と参考文献は除いています。)

言語 R5RS R6RS
Snobol 1 0
APL 3 0
Pascal 3 0
Haskell 1 4
Algol 5 3
Common Lisp 6 3
ML 2 3
C 2 2
Python 0 3
Smalltalk 0 4
C# 0 3
Ruby 0 4
合計 23 29

登場する言語の種類でみたら、R5RSが8種類、R6RSが9種類。
登場回数で見たら、R5RSが23回、R6RSが29回。
やはり増えているようです。
しかし、APLやSnobolが登場しなくなり、RubyやPythonが登場したというのは分かるのですが、
なんで今更になってSmalltalkが登場したのでしょうか。謎です。

世界初(?) プリンタでlispが動いた

月曜日, 1月 28th, 2008

以前、日記で、pslispについて、


つまり、目標はプリンタで動かすことなんですが、
現状ではGhostscriptでしか動作を確認していません。

と書いていたら、koguroさんが実際に動かしてくれました。
pslispをPSプリンタに出してみた
簡単なリスト操作で6分かかったというのがなんとも生々しいですが、
普通に印刷できているようで感動しました。
koguroさん、ありがとうございます。

やる夫が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  \  試験のことを忘れてたお…   |     (__人__)    |    \     ` ⌒´     / (この物語はフィクションです)

PostScriptの上のLispの上のPostScript

金曜日, 1月 25th, 2008

昨日はPostScriptでLispインタプリタをつくり、それを用いLispインタプリタをつくりました。
そして今日は、PostScriptでつくったLispインタプリタを用い、PostScriptインタプリタをつくりました。

  • PostScriptインタプリタ (pslisp用のプログラム。普通のSchemeインタプリタでも運がよければ動くかも?)
  • pslisp (昨日から結構手を加えました。)

実際にpslispで動かす際には改行を空白に置き換え、1行で記述してください。
PostScriptをつくったといっても、もちろんそのごく一部だけで、
図形も何も描けません。ただ計算ができるだけで、
実際につくったのは以下の機能だけです。

  • 四則演算(add, sub, mul, div)
  • スタック操作の一部(dup, exch, pop)
  • 条件分岐(if, ifelse)
  • 変数の定義(def)
  • 数値比較(eq)

上記のソースを利用してPostScriptのプログラムを書くには次のように、
(postscript ‘(プログラム))
を評価します。
(PostScriptインタプリタのソースの最後に実際にこれが記述してあります。)

(postscript '(
/fact
{
dup 0 eq
{
pop 1
}
{
dup 1 sub fact mul
} ifelse
} def
10 fact
))

ここでは10の階乗を求めるPostScriptのプログラムを書いています。
「PostScriptの1トークン = Lispの1シンボル」として読み込ませているので、
トークンとトークンの間には必ず空白を入れる必要があります。
全くもって使い道のないものをつくってしまいましたが、
大学の試験が近づいていることから逃避することによって発生するエネルギーを、
プログラミングによって発散した結果、生まれてしまったかわいそうなプログラムなので、
どうか生暖かい目で見守ってください。

わーい \(^o^)/ LispをPostScriptで書いたLispで書いたよー!

木曜日, 1月 24th, 2008

zickです。
最近、巷(*)ではLisp(Scheme?)を実装するのが流行っているようで。
その流れにのっとって私も変なものをつくってみました。
***PostScriptで書いたlisp***

名前はまだないのですが、仮にpslispと呼びます。
このpslispはPostScriptで書いたLispインタプリタです。
単に式を評価するだけではなく、その値を図示してくれる優れもの(?)です。
実は去年の4月ごろにほぼ完成していたんですが、
条件分岐などを加え、再帰が使えるようになりました。
***pslispで書いたlisp***

pslispで動かすためにエスケープ文字を付加し、改行を消しているためカオスなことになってます。

(追記)
はてなブックマークにて指摘がありました。

yshl (と)が対応していればエスケープは無くていいし、文字列中で改行できるので、もっと読みやすくなるはず。

ありがとうございます。お陰でずいぶん読みやすくなりました。
改行の方は面倒なのでまた今度で(笑)

まあ、これだけ見てもなんのことやらといった感じですが、
自分で書いたlispインタプリタの上でさらに、
lispインタプリタが動いていると考えると、なかなか感慨深いものです。

なんでまたPostScriptなのかというと、
「PostScriptってチューリング完全らしいよ」
「ってことはプリンタでLispを動かすことができるんですか!?」
という会話をし、そのまま勢いでつくったというだけです。
相変わらず何も考えていません(笑)
つまり、目標はプリンタで動かすことなんですが、
現状ではGhostscriptでしか動作を確認していません。
レーザプリンタなどで動作確認をしてくれたら嬉しい……ですが、プリンタの安全は保障しかねます。
(*)巷の人たち

NScLisper 一周年

土曜日, 1月 12th, 2008

zickです。
なんと今日でNScLisperをつくり始めてから1年(と1日)が経ちました!
わーい わーい
去年、どんな心境でNScLisperをつくったのか。
それがどういう形でリリカルLispに繋がったのか。
当時の貴重な資料(といっても私の日記ですが)が見つかったので公開します。