コンピュータに自然な日本語で命令できるらしい

早速だが、この文章を読んで欲しい。

「何の階乗を求めますか」と尋ねる。
「{それ}! = {それの階乗}」と言う。
●階乗(nの)
 Sは1。
 1からnまで繰り返し
  Sにそれを直接掛ける。
 Sで戻る

これを見たら大体わかりますよね。
これはなでしこのプログラムですよ。
日本語を用いたプログラム言語で、その昔ひまわりと呼ばれていたものの改良したもの。


尋ねた結果は、それという変数に入っていると。
なんかこの辺はPerlに似ていますよね。それと$_って似てるよね。
それで関数を作ってみたのだが、これが結構おもしろい。
●がユーザー定義命令の印。ユーザー定義命令というけど、関数といいたくなるよね。
、インデントの間が関数であると。そう、なでしこはインデントでいろいろ示す。
そういえばRubyもインデントで示すよね。これはなかなかいい。
()内は引数リストで、(a,b,c)などと書くこともできるけど、せっかくだから日本語的に書きたいよね。
で、助詞を区切りにつかうと。助詞のことを考えながらやれば引数の順番を入れ替えても動く。
ちなみに助詞は
とは、は、について、ならば、なら、でなければ、から、まで、までを、までの、で、を、の、が、に、へ、と、して、だけ、くらい、なのか、として、より、ほど、など、って、では、て、
らしい。結構いろいろあるのでおもしろいね。
繰り返しは言うまでもなくfor文的なもの。○○で、と書くとカウンタ変数を指定できる。
「Sで戻る。」というのはCなんかのreturn S;に相当するもの。
戻るとだけ書けば、それで戻ると解される。
と、作るときは気にするかも知れないけど、見るだけならわかりやすいですね。


実は趣旨もPerlに似ていて、作業をスクリプト化して便利にするのが目的。
まぁそんななので、見た目がわかりやすいようにしたとのこと。
実はかなり機能は豊富でセッター/ゲッターとか、イベントとか、グループとか。
イベントはPerlのサブルーチンのリファレンス相当のもの、
グループはオブジェクト指向のクラスのこと。だけど、イベントを持つ構造体みたいなものかな。
まぁこの辺も、Perlのパッケージに似てるような気がする。あれよりは強力か。
せっかくだから試してみた。

マイテキストとはファイル。
マイテキストのファイル名は「C:\test.txt」。
マイテキストの置換元は「あああ」。
マイテキストの置換先は「ううう」。
結果はマイテキストの置換。
結果を表示。
■ファイル
 ・ファイル名 ←ファイル名設定 →ファイル名取得
 ・{非公開}_ファイル名
 ・{非公開}データ
 ・{非公開}ファイル名設定(値)~
   _ファイル名は値。
   データに_ファイル名を毎行読む。
 ・{非公開}ファイル名取得~ それは_ファイル名。
 ・置換元 ←置換元設定 →置換元取得
 ・{非公開}_置換元
 ・{非公開}置換元設定(値)~ _置換元は値。
 ・{非公開}置換元取得~ それは_置換元。
 ・置換先 ←置換先設定 →置換先取得
 ・{非公開}_置換先
 ・{非公開}置換先設定(値)~ _置換先は値。
 ・{非公開}置換先取得~ それは_置換先。
 ・置換~
   もし、_ファイル名が空ならば
    「ファイル名を設定してください」と言い、戻る。
   もし、_置換元が空ならば
    「置換元を設定してください」と言い、戻る。
   もし、_置換先が空ならば
    「置換先を設定してください」と言い、戻る。
   結果は「」。
   データを反復
    それに改行を追加。
    それの_置換元を_置換先へ正規表現置換。
    結果に「{それ}」を追加。
   結果で戻る。

■がグループの宣言、・がメンバ変数やメソッドの宣言。
メソッドはイベントで書く。
・書く~○○する。
という風に書く。~でイベントと実際やることを結びつけると。
←でセッター・→でゲッターを指定する。
セッターは引数に値を1つ取って指定すると。
ゲッターは得る値をそれに入れてあげると。
{非公開}というのもあるので、なかなかよいですね。


ただ、日本語はいい加減にも書けるけど、その分うまく書かないとうまく解してくれない。
ひたすら関数的に書いていけばいいプログラム言語とは事情が違う。
BASICは英語のように書けて、お話しするようにプログラムが書けると言われている。
まぁ実際はそんな気はしないけど、そうなのかもしれない。
なでしこはあまり使わないけど、たまに使うとおもしろいですね。