はじめに
日本語プログラミング言語Mindの小技「合成」について説明したいと思います。
対象読者
日本語プログラミング言語Mindのユーザー、または日本語プログラミング言語に興味のある方
この小技に関連するMind言語マニュアル
この小技に関連するMind言語仕様の記述はMind8プログラミングマニュアルに記載があります。
7 文字列操作
└文字列の簡易な合成
より簡易に、スタックから渡された2つあるいはそれ以上の数の文字列を合体・合成するような機能について解説する。
構文=<文字列1>と <文字列2>を 合成 → <文字列>
2つの文字列をライブラリ内部の文字列実体変数上に合成し、その文字列情報をスタックに返す。
合成すべき2つの文字列はスタック渡しで良い。
本機能(本記事)は、下記のバージョンに対応しています。Mind8のLinux版も対応していると思いますが、本記事では特に検証を行っておりません。
対応バージョン
■Mind7 ■Mind8 ■Mind9
■Windows版 □Linux版
小技の解説
Mindの小技「合成」は、Mindの文字列変数同士を連結する機能の一つです。ランタイムライブラリ内で用意された文字列実体変数を使って、スタックにつまれた2つの文字列情報を1つに連結してスタックに文字列情報として返します。
注意点は公式マニュアルに記載のある下記の点です。
ライブラリ内部に4本分の合成用の文字列実体が確保されており、それらが循環して使用されるようになっている。つまり、連続して4回まで独立した文字列を合成することができる。
なお、合成用のライブラリ内変数は2048バイト(全角なら1024文字分)以下でなくてはならない。これを超えた合成をおこなうとすると多くの場合、後のほうの文字列が尻切れになる(特にエラーは検出されない)。
*ランタイムライブラリ内で用意された文字列実体変数は4つまで
*用意されている文字列実体変数のサイズは2048バイト
ということです。
2点目の内容はわかりやすく、これはスタックにおく2つの文字列情報のサイズの合計が2048バイト超えられないということです。(超えた場合は切り捨てられる。)
1点目の内容は下記のように10個の文字列を連続して合成してスタックに置いたままで、あとから5つ拾う(文字列実体変数に代入するなど)しても1つ目の内容が5つ目の内容で上書きされてしまうということです。
「あい」と 「こい」を 合成し (「あい」、「こい」→「あいこい」)
「あき」と 「ふゆ」を 合成し (「あき」、「ふゆ」→「あきふゆ」)
「あめ」と 「はれ」を 合成し (「あめ」、「はれ」→「あめはれ」)
「あさ」と 「よる」を 合成し (「あさ」、「よる」→「あさよる」)
「あゆ」と 「さば」を 合成し (「あゆ」、「さば」→「あゆさば」)
5回 回数指定して 一行表示 繰り返す。 ※スタックトップから表示
あゆさば
あさよる
あめはれ
あきふゆ
あゆさば ←「あいこい」ではなくなっている
これはスタックに積まれた文字列情報変数がランタイムで用意された4つの文字列実体変数を繰り返して参照しているためで、5回続けて「合成」すると1つ目の文字列実体変数の内容が5回目の処理で上書きされたことから生じる現象です。
以下のサンプルソースでは、この1点目の制約を回避する方法として、連続して合成した結果をそれぞれ別の文字列実体変数に格納して感じで書いてみます。あくまでバッファとして利用して、結果の文字列を文字列実体変数に確保しておくイメージとなります。
Mindプログラムソース
文字列を5回連続合成して表示するとは (・ → ・)
「あい」と 「こい」を 合成し (「あい」、「こい」→「あいこい」)
「あき」と 「ふゆ」を 合成し (「あき」、「ふゆ」→「あきふゆ」)
「あめ」と 「はれ」を 合成し (「あめ」、「はれ」→「あめはれ」)
「あさ」と 「よる」を 合成し (「あさ」、「よる」→「あさよる」)
「あゆ」と 「さば」を 合成し (「あゆ」、「さば」→「あゆさば」)
5回 回数指定して 一行表示 繰り返す
改行する。
文字列を安全に5回連続合成して表示するとは (・ → ・)
文字列実体1は 文字列実体
文字列実体2は 文字列実体
文字列実体3は 文字列実体
文字列実体4は 文字列実体
文字列実体5は 文字列実体
「あい」と 「こい」を 合成し 文字列実体1に 入れ 文字列実体1をつむ
「あき」と 「ふゆ」を 合成し 文字列実体2に 入れ 文字列実体2をつむ
「あめ」と 「はれ」を 合成し 文字列実体3に 入れ 文字列実体3をつむ
「あさ」と 「よる」を 合成し 文字列実体4に 入れ 文字列実体4をつむ
「あゆ」と 「さば」を 合成し 文字列実体5に 入れ 文字列実体5をつむ
5回 回数指定して 一行表示 繰り返す
改行する。
メインとは (・ → ・)
文字列を5回連続合成して表示し
文字列を安全に5回連続合成して表示する。
合成結果の値を文字列実体変数に格納するのがポイントです。文字列情報で宣言すると結果はローカル宣言された文字列情報を介してランタイムの文字列実体変数を参照してしまいますのでこの点も注意してください。
コンパイル結果
ではコンパイルしてみます。下位ライブラリはfileを指定します。
Mind9
下図はMind9βです。
C:\developments\vscode\mind9>mind combine2strings file
日本語プログラミング言語 Mind Version 9.03 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. c:\mind9-beta\Mind9-beta-7\bin\mindex.exe --> combine2strings.exe
Mind8
C:\developments\vscode\mind9>mind combine2strings file
日本語プログラミング言語 Mind Version 8.07 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. c:\pmind\bin\mindex.exe --> combine2strings.exe
Mind7
C:\developments\vscode\mind9>mind combine2strings 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 -> combine2strings.exe
実行結果
つづいて実行してみます。
Mind7/8/9β
Mind8の結果です。記述は割愛していますがMind7/9βも同じです。
C:\developments\vscode\mind9>combine2strings
あゆさば
あさよる
あめはれ
あきふゆ
あゆさば
あゆさば
あさよる
あめはれ
あきふゆ
あいこい
C:\developments\vscode\mind9>
いかがでしょうか?イメージがつかめれば幸いです。
参考情報
この小技「合成」を使った記述例は未発見です。
おわりに
いかがでしたでしょうか?なにかの参考になれば幸いです。
本記事シリーズのご紹介
- ほとんどの記事ではMind7、8、そして9βでの検証を行っています。
- Mind8公式マニュアルの基礎情報をベースに、Mind7・8の上級者向け情報も網羅しています。
興味を持たれた方は日本語プログラミング言語Mind公式サイトにアクセスすると、Mindコンパイラをダウンロードできますよ。
面白い!、楽しい、カンタン、難しいのも書ける!みんなでやってみよう
しい、カンタン、難しいのも書ける!みんなでやってみよう![]()