かなり適当な不定期日記(仮)
――日々の思いや出来事の織り成すカオスを言語化してみる。
スポンサーサイト
--月--日 (--)
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
診断メーカーの関数展開的記述法 (1) りんごとねこ
04月17日 (月)
診断メーカーにリストの枝番とか、if文分岐とか、いろいろ増えてたので、
遊びつつ調べてたらリストで関数展開的な記述が出来る事に気が付いた:


なので、これから数回に渡って、プログラミング初心者でもわかるように、
説明講座のようなものを書いていこうと思います。

第一回たる今回は、基礎的な説明のために、
単純に「<フルーツ>と<動物>」と言う出力をしてみます。

今回の最終結果がこちらとなります:




第一段階として、単純にこう設定していきます:

本文:
[LIST1]

LIST1:
りんごと[LIST2]
みかんと[LIST2]
ばななと[LIST2]

LIST2:
ねこ
いぬ
わに

本文の「[LIST1]」が展開されると、たとえば「りんごと[LIST2]」となり、
このうち「[LIST2]」部分がさらに展開され、
最終的には「りんごとねこ」と表示されます。


これなら関数展開的な使い方無しでも実現できますが、まだまだこれからです。

今度は、フルーツと動物の組合せを3ペア表示してみましょう。

まずはこんな感じで行けそうですが、実行しないでください

本文:
[LIST1]

LIST1:
りんごと[LIST2]
みかんと[LIST2]
ばななと[LIST2]

LIST2:
ねこ[BR][LIST1]
いぬ[BR][LIST1]
わに[BR][LIST1]

「実行しないでください」の訳は、実行するとこうなるからです:
ss_20170417_093514.png 

内部的に無限ループが起こります。
関数展開的記述では、これに注意が必要です。

無限ループを未然に防ぐには、二つの重要な点があります。

1) [LISTn]の記述に枝番をつける

[LIST]の枝番([LIST1_1]、[LIST1_2]...)について
[LIST1]を複数設置しても同じ値が表示されます。
そこで[LIST1_1]、[LIST1_2]という形で枝番を付けると、同じリストから新たに異なる値を割り当てる事が出来ます。
---診断メーカーより引用
まずこれをしないと、内部で永遠に
「りんごとねこ りんごとねこ りんごとねこ …」
と回り続けて終了しません。(これが無限ループ)

なので、毎回別の値を取ってもらうよう、枝番を付けます:

本文:
[LIST1]

LIST1:
りんごと[LIST2_1]
みかんと[LIST2_2]
ばななと[LIST2_3]

LIST2:
ねこ[BR][LIST1_1]
いぬ[BR][LIST1_2]
わに[BR][LIST1_3]

しかし、これでもまだ無限ループが起こります。
「りんごとねこ みかんといぬ ばななとねこ みかんといぬ …」
と、ねこが複数回選ばれて、そこから無限ループしてしまうからです。
 

2) リストオプションを設定する

これを防ぐには、リストの下の「リストオプション」で、
「消す(一つだけ)」を選ぶと、複数回選ばれなくなります:
ss_20170417_093731.png
これを適用すると、選ばれるごとにリスト内から消えるので、
重複して選ばれることもないし、また
リストの残り行がなくなった時点で自動的に止まってくれるので安全です。

これで無事に、例えば
りんごとわに
ばななといぬ
みかんとねこ
と表示されます。


ここまでも枝番を使えば、関数展開的な使い回し無しでもできます。
(本文に[LIST1_1][BR][LIST1_2][BR][LIST1_3]で呼ぶとか)

ここで、この方式でしかできない事を一つ試してみましょう。
出力の情報量を、可変にできるのです。

上記の診断を少しだけ変えてみます:

本文:
[LIST1]

LIST1:
りんごと[LIST2_1]
みかんと[LIST2_2]
ばななと[LIST2_3]

LIST2:
ねこ[BR][LIST1_1]
いぬ[BR][LIST1_2]
わに[BR][BR]わにが残ったフルーツを全て食べてしまったので終了

この状態での診断メーカーを残してあるので、以下からお試しください:

途中でわにが出ると、強制終了します。たとえば:
りんごとねこ
ばななとわに

わにが残ったフルーツを全て食べてしまったので終了

これもif文を使えば、関数展開的記述法を使わずに実装できますが、
この方法の方が、わかりやすく書いていけると思っています。


さて、この書き方の基礎はこんな感じです。
次回からは、実際に作れる診断の型を、幾つか見てみます。
プレビューとしては、こんな感じです:

では、お楽しみに!
コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
<FC2 BLOG の HTTPS 対応まで暫定的にテキストボックスにしています> ...
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
この記事へのトラックバック

copyright © 2005- , yk. all rights reserved.
Powered by FC2ブログ.
/ 無料カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。