フラットな式をどう書くか

skySchemeにも簡単なシェルが欲しくて、例えば、

[VUSB] > [USB Mass storage] > [SCSI] > [EXT2].myfs
myfs > (dir "/").mydir
mydir > (myfilter) > [HTTP server]

のような感じでHTTP経由でファイルが公開できると良い。(skySchemeはR6RSと異なり、空白を含んだatomやその他オブジェクトを書くために[ ]を使う)
イメージとしてはgstreamerのパイプラインに近い。

gstreamerのパイプラインは途中のオブジェクトに名前をつけて分岐するなどの高度な操作が行えるのでUNIXのpipeよりも出来ることは多い。UNIXのpipeは構造化されていないので、2つ以上のストリームを扱う場合に微妙に不都合がある(fd番号指定という方法も有るが。。)
この手のグラフは、

  • 複数行になる可能性があり
  • 多くの式がフラットになる

という点で、あまりS式で直接書かせるのは良いアイデアではない。同様の理由でおそらく数式も何らかの対処をすることになるだろう。
フラットな式をschemeで記述する方法としてはGaucheの$のような考察がある。

どちらにせよ、ちゃんとしたscheme shellのためには単純な行編集では自ずと限界が出てきて、何らかの編集システムをコマンドラインに組み込む必要がある。
上の例を素直にS式で書くと、

(let* ((myfs (joint-stream [VUSB] [USB Mass storage] [SCSI] [EXT2])))....

のようになるかもしれない。しかしこのような記法はあまり"scheme的"では無いように思える。
通常の機能を超えた(emacs行編集やbash行編集以上の)機能をコマンドラインに取り込むことには抵抗があるかもしれないが、どうせ現実的なシステムではFEPという形で日本語入力という特殊機能が付与されるので、最初から高度な連想システムを前提としたrich-command-lineを考えることはそれほど間違っていないように思う。
シンボリックな、言い方を変えると、文字が機能を持つようなシステムは綿密に検討する必要が有る。
例えば、文字が意味を構成していたいわゆる正規表現を進化させたPerl6 rulesはブロック構文を持ったプログラミング言語に変化している。

要するに、未だにこの分野は発展途上で発想の余地は十分にある。