もっと楽しむ! プログラミング言語 「豆」談義

第7回 『なでしこ――こんにちは世界』

この記事を読むのに必要な時間:およそ 2 分

日本語ロジックでプログラミング

これまで「Lisp」,「Prolog」,「LOGO」,「Smalltalk」を取り上げてきましたが,これらの言語に共通していることは何でしょうか?

言語のタイプも関数型,推論型,オブジェクト指向,国もアメリカだったりフランスだったりと一見すると何も共通点がないように見えます。でも,大きな共通点が1つはっきりと存在しています。それはソースを記述する言語が英語(アルファベット)ベースになっているということです。

このページを読んでいる皆さんは恐らく日本語を母国語にしている人でしょう。普段プログラムを組んでいるときには,よっぽど英語に熟達した人でないかぎりロジックを日本語で考えてからそれを英語に翻訳していませんか?そのせいで,後でソースを読み返すと恥ずかしいスペルミスやら英語圏の人が読んだら意味不明のメソッド名になっていたりすることも度々……。

日本人なのだから,プログラムロジックを日本語で考えて,日本語で書いてみたいと思いませんか?

かつての日本語プログラミング言語とは何か

20年ほど昔のことですが,個人用のコンピュータがパソコンではなくまだマイコンと呼ばれていた時代にも日本語で記述できるプログラミング言語はすでに存在していました。それは「ぴゅう太」というコンピュータに搭載されていた「G-BASIC」という言語です。

とはいえ,G-BASICはBASICのコマンドをそのまま日本語にしてあるだけのものでした。そのため質の悪い機械翻訳のようで,多少の取っつきやすさや理解のしやすさはあるのですが,それ以上ではありませんでした。

G-BASICのソースコードは,次のサイトに掲載されているのでご覧になってみて下さい。

「ひまわり」から「なでしこ」

なでしこは,クジラ飛行机(くじらひこうづくえ)さんが開発公開しているフリーの「日本語プログラミング環境」で,同氏の開発された「ひまわり」の発展形に位置づけられるスクリプト型の日本語プログラミング言語です。また,IPAが主催する未踏ソフトウェア創造事業の2004年度採択案件にもなりました。

プログラムの実行は,一般的にはまずそのソースを解析することからはじまります。文を分解して命令と処理対象のデータに分類したのち,コンパイル型言語ならコンパイルが実行され,スクリプト言語などのインタプリタ型言語ならプログラムが実行されることになります。

このソースコードの解析を行うときに日本語の特性が弱点になります。英語は単語間を空白で区切って記述するので言葉のくくりが自然とできるようになっていますから,解析機はその分割された単語について解析を行っていけばよいことになります。

しかし,日本語は句読点や括弧などがない限り全ての文字が一つながりになっています。このような文字の連なりを解析しようとすると,辞書を用意してマッチングを行うなどの方法で処理系が形態素解析※1を行うか,プログラマが何らかの方法で英語のように単語間を区切る書き方(分かち書き)をすることになります。

なでしこの前身となった「ひまわり」は,プログラマに句読点や空白を使用した分かち書きをしてもらうことでこの問題に対処しました。

ひまわりのソース

「こんにちは世界」と,表示

そのためプログラムは日本語としてはいくぶん不自然な表現となってしまいました。その点,なでしこはスクリプトエンジンが「助詞」を使ってコードを分解するため,解析可能でありながらより自然な日本語で記述できるようになっています。

なでしこのソース

「こんにちは世界」と表示

プログラムの解析はシンプルに行われているので,変数名に助詞を含めると意図しない分解をされてしまいます。また「表示」「ひょうじ」としてしまうとエラーとなってしまいますが,その代わりに解析の中で送りがなは無視されているのでより日本語らしく文脈にあった記述をすることができます。次の3つの文は全く同じに解釈されます。図1

「こんにちは世界」と表示
「こんにちは世界」と表示する
「こんにちは世界」と表示しろ

さらに,ひらがな・カタカナ・大文字・小文字を別なものとして区別します。

図1 命令の送りがなは無視されます

図1 命令の送りがなは無視されます

※1)
文を,それ以上細かくしてしまうと意味がなくなってしまう単位(形態素)まで分解してその品詞を特定すること(Wikipediaより)。

著者プロフィール

チーム北海道

居酒屋北海道をこよなく愛するエンジニア集団(伊藤清人,江川崇,荻原利雄,長谷川裕一,吉野雅人 以上株式会社豆蔵所属)。

URLhttp://www.mamezou.com/

コメント

コメントの記入