https://scratch.mit.edu/projects/357130538/
こちらのプログラムはペア数列数の実装をしたはずなのですが、何故かまともに動いてくれません。助けてください。
https://scratch.mit.edu/projects/357130538/
こちらのプログラムはペア数列数の実装をしたはずなのですが、何故かまともに動いてくれません。助けてください。
ああ、理解できました。ペア引き継ぎをリスト2にする、って構文で既にペア引き継ぎは文字列としてキャストされたリスト2になっちゃうんですね。じゃあ関係なさそうですね。
「文字列のリストの長さは文字列として結合した時の長さ」はキャストの規則と言うところです。
「文字列のリストのn番目は文字列として結合した後のn番目」については、また語弊を起こしてしまったようですが、もともとPairはペア数列の項を全て結合させたものです。
ペア分解(Pair)は言葉で言えば「Pairの中の最初の閉じかっこを探してそれより前(つまりペア一つ分)を分解ペア保管に入れ、それ以外の部分をまたペア分解にかける、引数のPairがもし空であったならそこでプログラムを止める」と言うプログラムです。文字列をリストとして扱って探索しているわけではありません。
に乗っている記事が参考になると思います。
ありがとうございます。もう1つ質問なのですが、どういう挙動を想定していてそれとズレている(バグっている)のでしょうか? 少なくともExpandとペア分解はきっちり繰り返されているように見えます。
expandのbut root(Pair)以降の部分が全く動いていないようです。実際ペアの複製、結合などに使われる(はずの)変数やリストに全く動きがみられません。
了解です。
という挙動まではあっていますか? 最後のところで分割ペア保管庫の長さより大きい値番目を参照しているように見えますが、これの挙動ってどうなりますか?
何でも屋4が参照しているのはS(a)(b)(Pair)のaなので大丈夫です。
1,2はあっていて3が間違っているということでしょうか? 何故何でも屋4が分割ペア保管庫の「分割ペア保管庫の長さ+1」番目ではなくS(a)(b)(Pair)のa、つまりS(分割ペア保管庫の長さ)(0)(空)の1つ目の引数である分割ペア保管庫の長さになるのでしょう?
3は多分それで合ってましたね…そこを直しても無限ループになるんですけども…
了解です。まあ全部のエラー直さないとどうせバグるので、1つ直せたと思って気長に行きましょう。
実行中にS(a)(b)が黄色くハイライトされるのはこれが実行中ということでしょうか? だとすると、S(a)(b)でb≠0の場合の分岐で何でも屋4が空の時に何でも屋2が「何でも屋4の長さ-1(つまり-1)」になり(バグっぽい)、その後の何でも屋4の何でも屋2番目(つまり-1番目)の文字を更に参照してしまい(バグっぽい)、それがコンマになることはないのでそのループが繰り返されつつ何でも屋2がどんどん1減っていってる気がします。