2
0

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の小技 「処理単語 .J」~文字列実体情報を得る~

Posted at

はじめに

日本語プログラミング言語Mindの小技「処理単語 .J」について説明したいと思います。

対象読者

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

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

この小技に関連するMind言語仕様の記述はMind8プログラミングマニュアルに記載はありません。(あったらごめんなさい。)

Mind7の付属の上級者向けドキュメントmind7\doc\string.docmに記載があります。

G5. 文字列実体情報による操作
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

(1)「○○は 処理単語 .J」で定義される処理単語を呼び出した場合、この
   処理単語に入った段階で、スタックトップには操作すべき文字列実体変数
   の文字列実体情報が積まれています。
   多くの場合、次のように定義を開始することになるでしょう。
   ------------------------------
   ○○は 処理単語 .J ([文字列実体情報] (必須) → ・)
           実体情報1は 文字列実体情報
       実体情報1に 入れ
       実体情報1を ・・・し
       ・・・・・・・・・・
   ------------------------------

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

対応バージョン

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

小技の解説

「処理単語 .J」は日本語プログラミング言語Mindのスタック属性を設定する単語で、処理単語の定義部の直後に記述します。

文字列変数をべたに扱っている場合は問題が少ないですが、処理単語の中にスタックで渡したときはいろいろ注意が必要です。とくに、一般のオブジェクト指向プログラミング言語のJavaやC#の文字列を引数で参照で渡した場合、関数内部のローカル変数としての文字列変数を変更した結果が、関数の呼び出し側の変数にも反映されているといったことと同じようなことを期待する場合に重要となります。

また、この件に関連して、Mindの処理単語に「文字列実体情報を得る」というものがあり、こちらもMind7付属の上級者向けドキュメントに記述があります。

G6. 新設語あるいは仕様変更のあった単語
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

■文字列実体情報を得る (Ver.7新語)
--------------------------------
 <文字列実体変数の> 文字列実体情報を得る → 文字列実体情報
--------------------------------
 これは上級者向けの機能です。
 文字列実体変数の文字列実体情報(変数先頭アドレスと変数長さをパックたもの)
を得ることができます。

ちょっとドキュメントを読んだだけではわかりにくい内容ですが、実は両者は関連していて、この後のサンプルソースコードでも説明いたします。

文字列実体変数の文字列実体情報(変数先頭アドレスと変数長さをパックたもの)を得るということが、先に述べましたC#やJavaで関数呼び出し元の文字列変数を関数内で操作して呼び出し後の処理で操作後の状態から使用することと同じことが実現できますが、属性設定 .Jはそれを暗黙に行わせるための設定です。

今回も文字列実体変数に対して「一文字検索」と合わせてTAB区切りの文字列からTAB以外の文字列を切り出す処理をサンプルとしています。

下記の記事に使われたサンプルソースコードを改修して流用します。

こちらの記事との違いは、この処理部分をライブラリとして処理単語化したことです。

Mindプログラムソース

ライブラリ(今回のお題)

wordsSeparate.src
指定切り出しコードは 変数。

指定切り出しコードをセットするとは (文字コード → ・)
    指定切り出しコードに 入れること。

指定コードで単語を切り出すとは 処理単語 .J (文字列実体 → 切り出し文字列)
        文字位置は 変数
        親側文字列は 文字列実体情報

    親側文字列に 入れ
    親側文字列を 指定切り出しコードで 一文字検索し 文字位置に 入れ
    文字位置が  ゼロ以外
    ならば
        文字位置で 親側文字列を 分断し
    さもなければ
        空列を 返し
    つぎに。

ライブラリ利用メインコード

wordsSegmentation3.src
"wordsSeparate.src"を コンパイル。

切り出し元文字列は    文字列実体 長さ 100。
切り出し単語帳は 7つの 文字列実体 長さ 10。

切り出し元文字列を初期化するとは (・ → ・)
    切り出し元文字列に 「Mind」を 入れ
    切り出し元文字列に TABを 一文字追加し
    切り出し元文字列に 「なでしこ」を 追加し
    切り出し元文字列に TABを 一文字追加し
    切り出し元文字列に 「C」を 追加し
    切り出し元文字列に TABを 一文字追加し
    切り出し元文字列に 「C++」を 追加し
    切り出し元文字列に TABを 一文字追加し
    切り出し元文字列に 「C#」を 追加し
    切り出し元文字列に TABを 一文字追加し
    切り出し元文字列に 「Java」を 追加し
    切り出し元文字列に TABを 一文字追加し
    切り出し元文字列に 「Typescript」を 追加し
    切り出し元文字列に TABを 一文字追加すること。

切り出し元文字列を一行表示とは (・ → ・)
    「切り出し元文字列:」を 表示し 
    切り出し元文字列を ダブルクオートで囲んで表示し 改行すること。

単語を一行表示とは (文字列 → ・)
    「切り出し単語:」を 表示し ダブルクオートで囲んで表示し 改行すること。


メインとは (・ → ・)
        切り出し単語は 文字列

    切り出し元文字列を初期化し、
    TABを 指定切り出しコードにセットし、
    切り出し元文字列を一行表示して 改行し、「単語切り出しを開始」を 一行表示し、
    
    切り出し単語帳の 要素数で 回数指定し
        切り出し元文字列を 指定コードで単語切り出し
        切り出し単語に 入れ、
        切り出し元文字列を一行表示し、
        切り出し単語で 単語を一行表示し、
        切り出し単語帳(回数)に 切り出し単語を 入れ、
    繰り返してから、

    改行し 「単語切り出し結果を表示」を 一行表示し、
    
    切り出し単語帳の 要素数で 回数指定し
        切り出し単語帳(回数)で 単語を一行表示し、
    繰り返すこと。

引用記事のバージョンwordsSegmentation2.srcとの違いです。

wordsSegmentation2.src
    切り出し単語帳の 要素数で 回数指定し
        切り出し元文字列を 指定切り出しコードで 一文字検索し 文字位置に 入れ
        文字位置が  ゼロ以外
        ならば
            文字位置で 切り出し元文字列を 分断し 切り出し単語に 入れ、
        つぎに
        切り出し元文字列を一行表示し、
wordsSegmentation3.src
    切り出し単語帳の 要素数で 回数指定し
        切り出し元文字列を 指定コードで単語切り出し
        切り出し単語に 入れ、
        切り出し元文字列を一行表示し、

wordsSegmentation2.srcでは「分断」によって切り出し文字列部分が消滅する文字列実体変数「切り出し元文字列」をメインのロジックの中で処理していますが、wordsSegmentation3.srcでは「指定コードで単語切り出し」のライブラリ単語1つにまとまっています。

下記のコードで文字列実体変数を普通に渡していますが、「指定コードで単語切り出し」の単語定義側で「処理単語 .J」を指定していない場合は、文字列実体変数「切り出し元文字列」は「分断」の処理結果の影響を受けません。

wordsSegmentation3.src
        切り出し元文字列を 指定コードで単語切り出し

「指定コードで単語切り出し」の単語定義側で「処理単語 .J」を指定していない場合で、正常に動作させたい場合は「文字列実体情報を得る」を使って下記のように記述します。

wordsSegmentation3.src
        切り出し元文字列の 文字列実体情報を得て 指定コードで単語切り出し

コンパイル結果

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

Mind9

下図はMind9βです。

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

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

Mind8

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

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

Mind7

C:\developments\vscode\mind9>mind wordsSegmentation3 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 -> wordsSegmentation3.exe

実行結果

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

c:\developments\vscode\mind9>wordsSegmentation3
切り出し元文字列:"Mind     なでしこ        C      C++  C#    Java        Typescript      "

単語切り出しを開始
切り出し元文字列:"なでしこ     C      C++  C#    Java        Typescript      "
切り出し単語:"Mind"
切り出し元文字列:"C   C++  C#    Java        Typescript      "
切り出し単語:"なでしこ"
切り出し元文字列:"C++       C#    Java        Typescript      "
切り出し単語:"C"
切り出し元文字列:"C# Java        Typescript      "
切り出し単語:"C++"
切り出し元文字列:"Java     Typescript      "
切り出し単語:"C#"
切り出し元文字列:"Typescript   "
切り出し単語:"Java"
切り出し元文字列:""
切り出し単語:"Typescript"

単語切り出し結果を表示
切り出し単語:"Mind"
切り出し単語:"なでしこ"
切り出し単語:"C"
切り出し単語:"C++"
切り出し単語:"C#"
切り出し単語:"Java"
切り出し単語:"Typescript"

c:\developments\vscode\mind9>

無事に切り出せました。(これでDB処理の方に展開できます:relaxed:

参考情報

この小技「処理単語 .J」を使った記述例の記事はまだありません。

おわりに

いかがでしたでしょうか?なにかの参考になれば幸いです。2025年は日本語プログラミング言語Mind生誕40周年です。

本記事シリーズのご紹介

本記事シリーズ「日本語プログラミング言語Mindの小技」は「日本語プログラミング言語Mind生誕40周年プロジェクト」の一環です。

興味を持たれた方は日本語プログラミング言語Mind公式サイトにアクセスすると、Mindコンパイラをダウンロードできますよ。

面白い!、楽しい、カンタン、難しいのも書ける!みんなでやってみよう:relaxed:

2
0
0

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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?