3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

日本語プログラミング言語Mindの小技 「演算順へのひらがな助詞の逆転介入」~計算式の日本語表現の語順の逆転~

Posted at

はじめに

日本語プログラミング言語Mindの小技「演算順へのひらがな助詞の逆転介入」について説明したいと思います。

対象読者

日本語プログラミング言語Mindのユーザー、または日本語プログラミング言語に興味のある方

この小技に関連するMind言語マニュアル

この小技に関連するMind言語マニュアルの記述はMind8マニュアルに記載があります。
6 数値演算
データの逆転介入

2つのデータを受け取り、しかも、そのデータの順番が意味を持つような処理単語を書いた場合、コンパイラによるデータの逆転介入が行われることを承知して欲しい。
 例えば、
    5から 2を 引く   ‥‥‥①
 と書く場合だが、このデータを逆に記述して、
    2を 5から 引く   ‥‥‥②
 としても(日本語として同じ意味であるように)正常に演算が行われる。これは、コンパイラが、データの逆順記述をその助詞の使い方から自動判断し、2つのデータを逆転してから処理するというサービスを行うからである。

コンパイラはまず、助詞を次のようにグループ分けする。
表6-1 コンパイル時の助詞の優先値
優先値  助詞
 1   が、 は 
 2   から、 より 
 3   を 
 4   よりも、 で、 だけ、 による、 により、 での、 との 
 5   に、 へ、 と 

 2つのデータの助詞を次のように表したたとき、次の条件を満足した場合に逆転介入を行うようになっている。
データ1+助詞1 データ2+助詞2 [処理単語] → ?
            ↓
     以下の条件を満たした時に逆転介入をおこなう
     助詞1の優先値 > 助詞2の優先値

本機能(本記事)は、下記のバージョンに対応しています。Mind8のLinux版も対応していると思いますが、本記事では特に検証を行っておりません。

対応バージョン

■Mind7 ■Mind8 ■Mind9
■Windows版 □Linux版

小技の解説

他の日本語プログラミング言語に比べて、ひらがなの扱いが比較的緩めでありますMindでの、一部のひらがな助詞に対して語順の違いと作用内容の違いを吸収する仕様にまつわるお話です。

基本的に逆ポーランド記法といいますか、スタックに変数や値をのせた順で処理されていくことに対して例外がありますよというお話です。

マニュアルでは引き算を例として解説していますが、この記事では少しひねった例で表6にでてくる助詞の扱いに関してMindコンパイラの挙動を探ってまいります。

Mindプログラムソース

gyakuten.src
計算処理時に助詞ひらがなによる値語順へ介入するとは (・ → ・)
        結果は 変数
    「通常の式表現」を 一行表示する
    [結果 := 10 - 7] 結果を 数値表示し 改行する
    10から 7を 引き 数値表示し 改行する

    「"を" より優先度1高」を 一行表示する
    7を  10から 引き 数値表示し 改行する
    7を  10より 引き 数値表示し 改行する

    「"を" より優先度1低」を 一行表示する
    7よりも 10を 引き 数値表示し 改行する
    7で 10を 引き 数値表示し 改行する
    7だけ  10を 引き 数値表示し 改行する
    7による  10を 引き 数値表示し 改行する
    7により  10を 引き 数値表示し 改行する
    7での 10を 引き 数値表示し 改行する
    7との 10を 引き 数値表示し 改行する
    
    「"を" より優先度2低」を 一行表示する
    7に 10を 引き 数値表示し 改行する
    7へ 10を 引き 数値表示し 改行する
    7と 10を 引き 数値表示し 改行する
    
    「"から" より優先度1高」を 一行表示する
    7から 10が 引き 数値表示し 改行する
    
    「"を" より優先度2高」を 一行表示する
    7を  10が 引き 数値表示し 改行する
    ※7を 10は 引き 数値表示し 改行する
    。

メインとは (・ → ・)
    計算処理時に助詞ひらがなによる値語順へ介入すること。

最初の「通常の式表現」の下2行はまさに通常の順序の表現の結果です。
それより下からが助詞による作用順序の逆転が起きている例です。

ここでは通常の日本語表現らしさを無視して、コンパイラの助詞の相対的優先度の判定がどのように行われるかを検証するため
「"を" より優先度1高」表6の中で「を」の直上すなわち優先度2との関係
「"を" より優先度1低」表6の中で「を」の直下すなわち優先度4との関係
「"を" より優先度2低」表6の中で「を」の2つ下すなわち優先度5との関係

「"から" より優先度1高」表6の中で優先度2と優先度1との関係
「"を" より優先度2高」表6の中で「を」の2つ上すなわち優先度1との関係
について比較実行しています。

結果をわかりやすくするため、基本的に同じ引き算に対していろいろな助詞を使っていますが、いろいろな優先度の助詞が引き算以外の場合にも日本語的にマッチするように用意されていますので、マッチしたものを記述すれば不自然さはさほど問題にはなりません。

最後のコメントアウト行は優先度1の「は」は定義文助詞としてかなりつよい位置にあるため、計算式内での使用はのちに説明しますがコンパイルエラーとなります。

コンパイル結果

ではコンパイルしてみます。下位ライブラリはfileを指定します。

Mind9

下図はMind9βです。

C:\developments\vscode\mind9>mind gyakuten file   

日本語プログラミング言語 Mind Version 8.11 for Windows
          Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. C:\mind9-beta\mind9-beta\bin\mindex.exe --> gyakuten.exe

Mind8

C:\developments\vscode\mind9>mind gyakuten file

日本語プログラミング言語 Mind Version 8.07 for Windows
          Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. c:\pmind\bin\mindex.exe --> gyakuten.exe

Mind7

C:\developments\vscode\mind9>mind gyakuten file
日本語プログラミング言語 Mind Version 7.5 for Windows
          Copyright(C) 1985-2004 Scripts Lab. Inc.
          Single user license.  Serial No:********
コンパイル中 - 終了
Coping.. C:\mind7\bin\mindexec.exe -> gyakuten.exe

実行結果

つづいて実行してみます。
Mind7の結果です。記述は割愛していますがMind8/9βも同じです。

C:\developments\vscode\mind9>gyakuten
通常の式表現
3
3
"を" より優先度1高
3
3
"を" より優先度1低
3
3
3
3
3
3
3
"を" より優先度2低
3
3
-3
"から" より優先度1高
3
"を" より優先度2高
3

「と」は「を」に対して逆転介入されませんでした。
また「は」は「が」と同じ優先度1でも、単語定義助詞として別格のため、式表現の逆転操作には使えないようでした。強引に使うと下記のようなコンパイルエラーとなります。

gyakuten.src 27 行目でエラー。行内容は、
    7を 10は 引き 数値表示し 改行する
      要因1:この位置では局所変数や局所処理単語は定義できません。
      要因2:この位置では局所処理単語は定義できません。
      要因3:数値または文字列を単語名として定義しようとしています。

3 個のエラーが有ります。

参考情報

この小技「計算式の日本語表現の語順の逆転」を使った記述例の記事はいろいろありそうです。なにげなく使われている場合が多いです。

おわりに

いかがでしたでしょうか?ちょっとマニアックな内容でしたが、なにかの参考になれば幸いです。2025年は日本語プログラミング言語Mind生誕40周年です。

本記事シリーズのご紹介

本記事シリーズ「日本語プログラミング言語Mindの小技」は日本語プログラミング言語Mind生誕40周年プロジェクトの一環です。興味を持たれた方は日本語プログラミング言語Mind公式サイトにアクセスして、Mindコンパイラをダウンロードできますよ。Mindプログラミングマニュアル(基本文法)ページから気になるお題の構文を選んで、この記事のようにサンプル実装実行してQiitaにアウトプットしてみましょう!筆者はMind7/8/9βで検証しておりますが、もちろんMind8だけでもじゅうぶんです。またお題が既存記事とかぶるのはまったく問題ありません。同じお題でみなさまの多様斬新なサンプルをお待ちしております:grinning:面白い!、楽しい、カンタン、難しいのも書ける!みんなでやってみよう:relaxed:

3
1
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?