複数の障害が発生しているが

複数の障害が発生しているが,まずBASIC版で起きている不具合から見てゆくことにしよう.

BASIC版:源氏6.1.zelの全体図を#9 冷泉院で開いて,TRIBEBOX:SetPotentialで停止.(primary->getFloor() != pot)が起きている.このエラーはTribeRelocation出口で実行されるHeapTribeBoxesで起きている.障害が起きているのはTRIBEBOX #1540 先祖=#1231 一院(0)[1] 優先=#1628 冷泉院(1) 始系列で,基準ノードの物理世代番号5に対し,系統ポテンシャル値は4になっている.⇒基準ノードの相対世代番号(listdata.Generation)が1になっている.どこかでシフトされているのではないか?⇒いや,それ以前の問題だ.

TRIBELIST::GoDownStreamで基準ノードの冷泉院が冷泉院の御息所の配偶者として展開されている.GoDownStreamが縦型探索になっているということにも関わりはあるが,それより問題は,MARGBOX:IsPrimeboxOrNotの動作を「IsPrimeboxOrNotを有効化」オフで止めているという点にある.この一点だけでも,このオプションが不可欠であることは分かる.関連するオプションとして,「系列接続に関わる結婚の優先展開」や「基準ノードの配偶者の外部婚を排斥」もオンに戻しておこう.DEBUGオプションの「右手配偶者が左手本人で停止しない@20210108」もオンとしておくのが安全だろう.⇒逆論理にしてオンに設定し,デフォルトオンのVERIFYに移した.

これでエラーは解消したが,グラフ検証系オフのときには,基準ノード/優先ノードの相対世代番号をゼロに正規化するという処理が入るはずなので,その辺りの動作を確認しておく必要がある.どこかで系列優先仮ノードが冷泉院(0)から(1)に切り替わっている.冷泉院の仮ノードは4つ出ている.

  1. #1230 冷泉院(0) 先祖=一院 関係=配偶者
  2. #1628 冷泉院(1) 先祖=一院 関係=配偶者
  3. #1629 冷泉院(2) 先祖=一院 関係=実子
  4. #1648 冷泉院(3) 先祖=一院 関係=養子

MakeUpTreeでは実子の(2)が基準ノードとして選択されているが,その後,SelectBaseBoxで配偶者の(0)に切り替わっている.この選択は誤っている.配偶者(0)はBTWが成立して不可視となり,再度SelectBaseBoxが呼び出されて(1)に切り替わる.このノードでSetPotentialのエラーが発生する.⇒このエラーを取るのはかなり難しい.SelectBaseBoxで可視で非配偶者の仮ノードがすでに選択されていない場合には再選択しないように修正してエラーは解消した.これで一応解決したということにしておこう.

ZT BASICで源氏物語全系譜6.1.ZELの全体図を#3 桐壷の更衣で開いて,TRIBEBOX::adjustGenerationRangeで停止した.(tribelist()->ZentaiMax != baselist->MaxGeneration)エラーが起きている.NormalizeRelativeGeneration→ SetTribeMaxGeneでTRIBELIST:ZentaiMinとZentaiMaxは更新しているが,baselist->MinGenerationとMaxGenerationとは同期していない.

このエラーが起きているのは,TRIBELIST::buildgenelist 世代枠リスト構築済みフラグが立っているためだ.SetTribeMaxGeneでUpdateGeneListを実行しようとすると,今度はdomain不在エラーが発生する.おそらく,domainはBUILDGENELISTフェーズでBuildGeneListを実行することで設定されているものと思われるが,baselistの生成時に設定するべきではないのだろうか?

GENELISTは2つリンクを持っているが,どちらもべた参照だ.あまり芳しくない設計だが… 特に世代枠リストの中に基本世代枠リストへのリンクを持つというのは不適当だ.まず,これを廃止できるかどうかを見てみよう.⇒簡単に廃止できた.基本世代枠リストの所在を尋ねるのなら,その所有者に尋ねるのが順当だ.domainも廃止してしまおう.その代わりにDomain関数を使えばよい.Domainは『参照』を返す関数になっているが,書き込み不要なのでリンクを返すだけでよい.GENELIST::InitializeGeneListも丸ごと廃止できる.

SetTribeMaxGeneでUpdateGeneListを実行するようにしているが,エラーが起きる.MinGeneration,MaxGenerationはすでに設定されているが,まだ世代枠が生成されていないため,動作不良が起きる.⇒この関数の中で調整することも不可能ではないが,世代枠リストはGoDownStreamとMakeUpTreeが完了した後にBUILDGENELISTで別途構成するようになっているので,buildgenelistフラグが立つのを待つというのでよいのではないか?⇒対処した.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA