Shiki’s Weblog

日本語プログラミング言語と簡約日本語 (2)

2019/01/27

 前回から、簡約日本語をベースにした日本語のプログラミング言語というものをかんがえてみています。
 いまあつかっているテーマは、「ひとがいると自動で電気のつく部屋」です。前回のかきかたでは、ライトがふたつになったとき、ほぼおなじプログラムをふたつかかないといけない。そういう問題がありました。
 今回は、これをみじかくかく方法をかんがえてみます。

主体と属性

 前回のライト1とライト2でちがうのは、どのスイッチをつかうか、という部分だけでした。「スイッチがある」という特徴は、ライト1とライト2でおなじです。
 そこで、ライトのプログラムのなかのスイッチは、ただ「ライトのスイッチ」とかいておきます。ライトのスイッチがスイッチ1とスイッチ2のどちらになるかは、あとで指定できればよさそうです。

主体: ライト
ーーーーーー
ひとがいましたら、
  ライトのスイッチをいれます。
そうでなければ、
  ライトのスイッチをきります。

 おなじように、スイッチのプログラムのなかでGPIOは、ただ「スイッチのGPIO」とかいておくことにします。

主体: スイッチ
ーーーーーーー
いれます、とは、
  スイッチのGPIOを1にします。
きります、とは、
  スイッチのGPIOを0にします。

 ライトのスイッチや、スイッチのGPIOのように、いろいろなものに設定できるものを「属性」ということにしておきます。
 ライトやスイッチのように属性をもっているのが「主体」になります。主体は、プログラムの文中では、あんもくの主語になっています。

ひとがいましたら、
  ライトのスイッチをいれます。

という文では、「ライトは、」という主語が省略されてかかれているわけです。

 これくらい準備しておくと、前回のプログラムはつぎのようにかけそうです。

はじめに:
ーーーーー
ここでは、
  ライトはライト1、ライト2、
  スイッチはスイッチ1、スイッチ2、
  ひと
をつかいます。
スイッチ1のGPIOをGPIO1にします。
スイッチ2のGPIOをGPIO2にします。
ライト1のスイッチをスイッチ1にします。
ライト2のスイッチをスイッチ2にします。

 個々のライトは、つぎのような宣言文をつかって、つくっています。

ここでは、
  [主体]は[なまえ]、[なまえ]、
  [主体]
  ……
をつかいます。

 なまえをつけて、いくつでもライトをつかえるようにしているのが宣言文です。

[主体]は[なまえ1]と[なまえ2]、

という形式は[主体]であらわされるモノをふたつ、[なまえ1]と[なまえ2]というなまえでつくります。3つ以上になれば、[なまえ1]、[なまえ2]、[なまえ3]、といったぐあいでかいていきます。

[主体]

という形式は[主体]であらわされるモノを[主体]とおなじなまえをつけて、ひとつだけつくります。

 これで、ライト1とライト2のためにべつべつにプログラムをかいたりしないですむようになりました。

あいまいな文

 うえでつくったプログラムには、じつはこまった部分があります。

スイッチのGPIOを1にします。
スイッチ1のGPIOをGPIO1にします。

 さいしょの文は、GPIOの出力を1にする、という意味でつかっています。つぎの文は、スイッチ1の属性GPIOをGPIO1にする、という意味でつかっています。わたしたちは、こういうあいまいな部分を、じぶんでおぎなってよんでいそうです。
 けれども、コンピューターのプログラムは、文のかたちだけをみます。そうすると、さいしょの文も、スイッチの属性GPIOを1にする、という意味でうけとってしまうかもしれません。
 GPIOの出力の値をかえたいのであれば、そうきちんとかいておくことにします。ここでは、出力を1にすることを「ハイにします」ということにします。GPIOの電圧をたかくする、という意味からきています。

スイッチのGPIOをハイにします。

 出力を0にすることは「ローにします」ということにします。GPIOの電圧をひくくする、という意味からきています。

スイッチのGPIOをローにします。

 こうなおしても、「ハイ」や「ロー」というなまえのモノがべつにあると、コンピューターはまだよみちがえるかもしれません。ここでは、そういう問題はのこっているということだけ、ふれておきます。
 以上の点に注意してかきなおしたプログラムは、つぎのようになります。

主体: ライト
ーーーーーー
ひとがいましたら、
  ライトのスイッチをいれます。
そうでなければ、
  ライトのスイッチをきります。

主体: スイッチ
ーーーーーーー
いれます、とは、
  スイッチのGPIOをハイにします。
きります、とは、
  スイッチのGPIOをローにします。

主体: ひと
ーーーーー
います、とは、
  GPIO3がハイです。

はじめに:
ーーーーー
ここでは、
  ライトはライト1、ライト2、
  スイッチはスイッチ1、スイッチ2、
  ひと
をつかいます。
スイッチ1のGPIOをGPIO1にします。
スイッチ2のGPIOをGPIO2にします。
ライト1のスイッチをスイッチ1にします。
ライト2のスイッチをスイッチ2にします。

コンピューターによる簡約日本語プログラムの解釈

 さきほどの簡約日本語でかかれたプログラムをじっさいにうごかすには、どうしたらよいでしょうか。それには、簡約日本語から、既存のプログラミング言語に変換できれば、よさそうです。
 ここでは、Pythonというプログラミング言語に変換していくことをかんがえてみます。Python 3は変数名にUnicodeがつかえるので、わりとよみやすくプログラムをかきかえられます。
 たとえば、つぎのようなPythonのプログラムの断片に変換することができそうです。(じつは、これもPythonのプログラムをつくって、簡約日本語からPythonに翻訳したものです。)

class ライト:

    def default(self):
        if ひと.います():
            self.スイッチ.いれます()
        else:
            self.スイッチ.きります()


class スイッチ:

    def いれます(self):
        self.GPIO.ハイにします()

    def きります(self):
        self.GPIO.ローにします()


class ひと:

    def います(self):
        return GPIO3.ハイです()


ライト1 = ライト()
ライト2 = ライト()
スイッチ1 = スイッチ()
スイッチ2 = スイッチ()
ひと = ひと()

スイッチ1.GPIO = GPIO1
スイッチ2.GPIO = GPIO2
ライト1.スイッチ = スイッチ1
ライト2.スイッチ = スイッチ2

while True:
    ライト1.default()
    ライト2.default()

 ここでは、ライトのプログラムは無限ループからうごかしつづけるようにしてみています。

まとめ

 今回は、簡約日本語でかいたプログラムをPythonにかきなおせそうだ、というところまですすめました。次回からは、じっさいに、簡約日本語のプログラムをコンピューターでうごかしてみたいとおもっています。

つづく。