トップ > 興味のあること > コンピュータ > ソフトウェア

Scheme

http://practical-scheme.net/gauche/index-j.html
http://www.kahua.org/cgi-bin/kahua.cgi/kahua-web/

2004年7月29日

Lispの方言。 厳選された機能を注意深く実装する、という方針らしい。 「末尾再帰はgotoループにする」ことが言語仕様として定められているとか、 結構面白そう。 実装もいろいろあるらしい。 とりあえずgaucheあたりで遊んでみようか。

2006年11月22日

エラトステネスのふるいで素数を求めるプログラム。 実行系はGauche 0.8.7。 もっとエレガントな方法があるんだろうなあ。

2008年6月5日

仕事でQ&Aをhtml化することがあるのだが、 いちいち目次を作ったりするのが面倒なので自動化できないか挑戦。 元データはテキストファイルだが、 これを質問、回答、更新日を1セットとしたS式に書き下す。

みたいな感じで。

まずはひとつの質問リストを渡されたらhtmlのli要素として組み立てる手続きを作る。

text.html-lite はGaucheのライブラリモジュールで、 標準で用意されている。 基本的なアルゴリズムは

  1. 渡されたリストの先頭要素(質問番号)にspanをマークして、
  2. 質問全体をaエレメントでくくって、
  3. さらにliエレメントでくくる。

#`"\#,(car x)"文字列の補間を使っている。

次は質問をまとめたリストを受け取って、 ulでくくった複数のliに組み立てる手続き。 mapでリストの要素をばらして、 最初に作ったmakeqlineに渡すだけ。

大本の質問リストを受け取って、 できあがったリストを出力するには、

かな。 (map car contents) で、質問部分だけを抜き出している。 text.treeもGauche標準のライブラリモジュール。 コマンドラインから実行して、 質問をまとめた別ファイルを読み込んで使うなら、

まとめると

これに最初のデータを喰わせると、

tom-a@sun$ ./qa.scm q1.scm
<ul class="qa-ul"><li class="qa-li"><a href="#Q.1"><span class="t-q">Q.1</span
>質問その1</a
></li
><li class="qa-li"><a href="#Q.2"><span class="t-q">Q.2</span
>質問その2</a
></li
><li class="qa-li"><a href="#Q.3"><span class="t-q">Q.3</span
>質問その3</a
></li
></ul
>
tom-a@sun$

となる。 ちょっと試してみただけだが、なかなかいい感じ。