プログラムのレイアウト

昔から、プログラムの表記法にはいろいろな話題が尽きません。

今でも、多くのプログラミング言語は英字、数字、記号などの文字(いわゆる、ASCII文字)で書くのがほとんどだと言ってよいでしょう。それを1次元の文字列として考えるかどうかということもあります。さすがに、今では、大昔の(いわゆる)IBMカードを重ねたカードデック(カードの束)のように、物理的に2次元(?)の形状をとることはないでしょう。

最近は、Emacsに言語ごとにモードが設定できて、賢いレイアウトを行って、読みやすいレイアウトが自然にできるようになっています。1次元の文字列のプログラムを2次元にレイアウトして分かりやすく表示しているわけです。

関数型言語では、かなり前から、レイアウトによって区切り記号(デリミタ, delimiter)を省略しようとするのも一般的になっています。Haskellにも「オフサイドルール」が使われています。大雑把に言えば、前行よりも前に出ない部分はその前の行の文法上の構成の中の部分要素になっているというものです。また、一列に書くときにセミコロン(;)で区切るところを改行によって代用することもあります。

「オフサイドルール」は、1966年にLandinが提案したISWIM

http://ja.wikipedia.org/wiki/ISWIM

にすでに現れているということです。ISWIMは実用的な言語ではありませんが、その後の関数型言語の設計に大きな影響を与えたものです。Landinは英国人だからというわけでもないでしょうが、サッカーやフットボールのオフサイドと発想に関連があるかも知れないと思ったりすることがあります。

http://en.wikipedia.org/wiki/Peter_J._Landin

2/16に「並列性忘却プログラミング」のことを書きましたが、最近、ときどき、Fortressという新しい言語を使ってみています。

http://projectfortress.sun.com/Projects/Community

この言語、大胆な試みが行われているのですが、なかでも、乗算(数のかけ算)の演算子は「とくにない」、いいかえれば、数学で普通に書くように、「空白」だというのです。一般のプログラミング言語で使うアステリスク (*) のように、目に見えるものは使わないのです。先日も、うっかりしていて、空白を一つ置いたのがエラーだというのが分からなくて難儀しました。もちろん、意識して乗算を表すときはよいのでしょうが、レイアウトの関係で空白を置いてしまったら、そこに乗算演算子があるというのは、なかなか気がつきません。

プログラムの表記を数学の表記に近づけるのはよいのですが、「幼児体験」としての先入観が邪魔をするところもあるようです。

One reply

  1. awk の連結オペレータも「空白」です.慣れてしまいました.

    Expressions take on string or numeric values as appropriate, and are built using the operators + – * / % ^ (exponentiation), and concatenation (indicated by white space).

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください