はじめに
日本語プログラミング言語Mindの小技「さらに合成」について説明したいと思います。
対象読者
日本語プログラミング言語Mindのユーザー、または日本語プログラミング言語に興味のある方
この小技に関連するMind言語マニュアル
この小技に関連するMind言語仕様の記述はMind8プログラミングマニュアルに記載があります。
7 文字列操作
└文字列の簡易な合成
より簡易に、スタックから渡された2つあるいはそれ以上の数の文字列を合体・合成するような機能について解説する。
2個を超えた文字列の合成をおこないたいときや、ループ処理で「次々と文字列を合成していく」ときのために以下の処理単語も利用できる。
構文=
<最初の文字列>を 第一合成文字列設定 → ・
<次の文字列>を さらに合成 → <文字列>3個以上の文字列を合成するための単語群である。
まず、「第一合成文字列設定」によって最初の文字列(この段階では空列を渡しても良い)を登録し、以下、これに対して「さらに合成」を繰り返せばよい。
本機能(本記事)は、下記のバージョンに対応しています。Mind8のLinux版も対応していると思いますが、本記事では特に検証を行っておりません。
対応バージョン
■Mind7 ■Mind8 ■Mind9
■Windows版 □Linux版
小技の解説
Mindの小技「さらに合成」は、Mindの文字列変数同士を連結する機能の一つです。前回記事の「合成」は2つの文字列をスタックにつんで連結された文字列を返す機能でしたが、こちらは使用することを宣言することでランタイムライブラリ内に文字列実体変数を動的に確保した上で、スタックにつまれた文字列情報を追加してスタックに返す機能です。
注意点は公式マニュアルに記載のある下記の点です。
「さらに合成」系を続ける限りは、初回に獲得した文字列実体が固定的に使用され、循環バッファが次に進むことはないため、「連続4回まで」の制約を気にせずに合成できる。
「<最初の文字列>を 第一合成文字列設定」で、動的に確保した文字列実体変数を指し示すポインタみたいなものは共有されていると推定されますので、連続して「第一合成文字列設定」してから「さらに合成」した場合になにが起きるかという点は注意が必要です。
以下のサンプルソースでは、まずは素直に「第一合成文字列設定」して続けて「さらに合成」を5回繰り返した場合を検証し、続けて「第一合成文字列設定」を2回以上連続して実行した後に「さらに合成」を繰り返した場合なにが起こるか検証します。
Mindプログラムソース
文字列を安全に5回連続さらに合成して表示するとは (・ → ・)
「あい」を 第一合成文字列設定し (「あい」→・) 「こい」を さらに合成し (「こい」→「あいこい」)
「あき」を 第一合成文字列設定し (「あき」→・) 「ふゆ」を さらに合成し (「ふゆ」→「あきふゆ」)
「あめ」を 第一合成文字列設定し (「あめ」→・) 「はれ」を さらに合成し (「はれ」→「あめはれ」)
「あさ」を 第一合成文字列設定し (「あさ」→・) 「よる」を さらに合成し (「よる」→「あさよる」)
「あゆ」を 第一合成文字列設定し (「あゆ」→・) 「さば」を さらに合成し (「さば」→「あゆさば」)
捨て 「たい」を さらに合成し (「たい」→「あゆさばたい」)
5回 回数指定して 一行表示 繰り返す
改行する。
文字列を5回連続さらに合成して表示するとは (・ → ・)
「あい」を 第一合成文字列設定し (「あい」→・)
「あき」を 第一合成文字列設定し (「あき」→・)
「あめ」を 第一合成文字列設定し (「あめ」→・)
「あさ」を 第一合成文字列設定し (「あさ」→・)
「あゆ」を 第一合成文字列設定し (「あゆ」→・)
「こい」を さらに合成し (「こい」→?)
「ふゆ」を さらに合成し (「ふゆ」→?)
「はれ」を さらに合成し (「はれ」→?)
「よる」を さらに合成し (「よる」→?)
「さば」を さらに合成し (「さば」→?)
捨て 「たい」を さらに合成し (「たい」→?)
5回 回数指定して 一行表示 繰り返す
改行する。
メインとは (・ → ・)
文字列を安全に5回連続さらに合成して表示し
文字列を5回連続さらに合成して表示する。
安全な書き方とそうでない書き方のサンプル双方ともに、5回目の文字列合成では、「さらに合成」の本来の用途である3つ目の文字列追加を例示するため「たい」を「さらに合成」しています。
「たい」を「さらに合成」する直前で捨てているのは、手前の「さらに合成」が連結された文字列情報をいったんスタックに返しているからです。
そうでない書き方でない方のスタックコメントの?は、筆者もソースを書いている段階ではどうなるかわからなかったためです。実際の状態は実行結果をご参照ください。
コンパイル結果
ではコンパイルしてみます。下位ライブラリはfileを指定します。
Mind9
下図はMind9βです。
C:\developments\vscode\mind9>mind combine3strings file
日本語プログラミング言語 Mind Version 9.03 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. c:\mind9-beta\Mind9-beta-7\bin\mindex.exe --> combine3strings.exe
Mind8
C:\developments\vscode\mind9>mind combine3strings file
日本語プログラミング言語 Mind Version 8.07 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. c:\pmind\bin\mindex.exe --> combine3strings.exe
Mind7
C:\developments\vscode\mind9>mind combine3strings 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 -> combine3strings.exe
# 実行結果
つづいて実行してみます。
## Mind7/8/9β
Mind8の結果です。記述は割愛していますがMind7/9βも同じです。
```cmd:
C:\developments\vscode\mind9>combine3strings
あゆさばたい
あさよる
あめはれ
あきふゆ
あゆさば
あゆこいふゆはれよるさばたい
あゆこいふゆはれよる
あゆこいふゆはれ
あゆこいふゆ
あゆこい
C:\developments\vscode\mind9>
いかがでしょうか?イメージがつかめれば幸いです。
結果的には最後に「第一合成文字列設定」した文字列実体変数に後続の「さらに合成」が作用しているようです。
文字列の簡易合成機能は注意して使えば便利ですが、公式マニュアルにも注意喚起されていますが、あくまで簡易機能なので使用する場合は注意が必要です。
堅固なプログラムにするには、この機構は使わずに、自前で文字列実体変数を用意して「追加」「一文字追加」などを使って普通に合成をおこなうのが望ましい。
参考情報
この小技「さらに合成」を使った記述例は未発見です。
おわりに
いかがでしたでしょうか?なにかの参考になれば幸いです。
本記事シリーズのご紹介
- ほとんどの記事ではMind7、8、そして9βでの検証を行っています。
- Mind8公式マニュアルの基礎情報をベースに、Mind7・8の上級者向け情報も網羅しています。
興味を持たれた方は日本語プログラミング言語Mind公式サイトにアクセスすると、Mindコンパイラをダウンロードできますよ。
面白い!、楽しい、カンタン、難しいのも書ける!みんなでやってみよう
しい、カンタン、難しいのも書ける!みんなでやってみよう![]()