パラメータの値の開始位置が start と end とで異なるのです。
う~ん、困ったなぁ。
間違うよなぁ、これじゃぁ。
そう、 GIMP TinyScheme のバグとも思える挙動をします。 バグ は 言い過ぎかな ... 。.
勿論、 バグではなく、 仕様なのだと思います
とは言え、この仕様は直せないでしょうね。
この部分を弄ってしまうと、影響範囲が あまりにも 広いので。
組み込み関数 substring は、一見、正常に動いている様に見えるのですが ... 。
少し、変な値を返します。
あっ、書き忘れました。 substring は プロシジャー ブラウザ には表示されない 基本的な Script-Fu の関数ですね。
どうも、 Script-Fu の実装である TinyScheme では 勝手が違う 気がします。
では、どう言う事なのか?、 Script-Fu コンソール を使って簡単に説明して見ます。
通常の関数(様々な開発言語上のもの) では、
部分文字列を返す変数は 引数 に 元の文字列 と 開始位置 と 終了位置(若しくは 文字数) を採ります。
GIMP Script-Fu 上でも (substring str start end) の形で 部分文字列 が得られます。
それでは、コンソールを。
> (define str "01234567890")
str
> str
"01234567890"
> (string-length str)
11
> (substring str 0 1)
"0"
> (substring str 0 2)
"01"
> (substring str 5 2)
Error: (<unknown> : 45906740) substring: end out of bounds: 2
> (substring str 5 7)
"56"
文字列 "01234567890" と 11 桁のものを用意しました。
substring 関数は、 元の文字列 str と、 開始位置(0 起算) start と、 終了位置(1 起算) end と を引数に取るのが分かります。
開始位置と終了位置で、その起算が異なるのは、要注意!です。
勿論、 終了位置であって、 文字数ではないのは、 上のコンソールで示した通りです。
引数の組み合わせによっては ご覧の様に Error になります。
Scheme を良くご存知の方からすれば、当たり前、なのかも知れませんが、
他の言語から来た人間には、とても、不自然に見えます。
0 件のコメント:
コメントを投稿