初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#26 2017-02-24 13:33:24

Hiro
Member

Re: Let関数でLoop処理を教えて下さい。

どうしても使い分けたいなら、
式内で完結なら D、式外に繰越なら $D だから、式は、

   Let([
      D=Case(Get(レコード番号)=1; ""; $D);
      $D=D+1
   ];
      $D
   )

Last edited by Hiro (2017-02-24 13:53:27)

Offline

#27 2017-02-24 18:52:06

honda
Guest

Re: Let関数でLoop処理を教えて下さい。

$付き変数の不可解さは、関数であるFileMakerの計算式に束縛を導入する筈のLet()を、
スクリプトに手続き型Variableをもたらすための「変数を設定」スクリプトステップと、
無理矢理中途半端に共存させようとした結果です。

FileMakerの計算式は関数です。関数中に、渡されたわけでもなく、自明でもない、
スコープも寿命も不安定な$付きの変数を混ぜること自体、
本来なら、まともな計算式の記述を放棄しているも同然です。
例にも挙げてますが、そういう式の評価中に、同識別子の「変数を設定」が動いたら…。
最低限、スコープと寿命と、それをぶち壊しにする仕様を把握し切れてから使うべきです。

-

Hiro wrote:

LetとEvaluateによるループ計算処理で、その簡便さに対し、
ループ回数の低さ(大凡300回以下)が利便上の問題とされますが、
入れ子の2重ループ式にするとカスタム関数の限界数(非末尾再帰1万回)
   をも超えたループ回数も可能になります。(スピードは鈍足ですが)
・例えば、安全を見て1重の最大数を半分以下の125回に制限しても、
   その2重ループは、 125X125=15,625 回となります。

これ、面白いですね。
ただスタックなりのリソースは大丈夫なんでしょうか?
Let()とEvaluate()での挙動考えると、評価待ちの両者がえらい深さになりそうな。

でも、125X125の各125単位で演算切れて一重目の125までは戻るんでしょか。
もしその通りなら、一重で300回回すより、10X30とかで回した方が軽い?

#28 2017-02-24 21:41:15

Hiro
Member

Re: Let関数でLoop処理を教えて下さい。

以下の2重ループ式で少し調べてみました。(式はループ回数をただカウントするだけの単純な式)

Let([
   $i=0; $x="";
   $loop1="Case($i=$max1; $x;
      Let([
         $x=$x + Let([$j=0; $y=\"\"]; Evaluate($loop2));
         $i=$i+1
      ]; Evaluate($loop1))
      )";
   $loop2="Case($j=$max2; $y;
      Let([
         $y=$y+1;
         $j=$j+1
      ]; Evaluate($loop2))
      )"
];
   Let([$max1=130; $max2=130]; Evaluate($loop1))    //←親・子ループの其々回数をココで差し替えて色々実験
)

1重ループの限界回数と2重ループの其々限界回数には相関関係があるようです。
     1重ループの限界回数 = 親ループの回数+子ループの回数      // 260 = 1 + 259 みたいな
このため、2重ループ式で最大回数を得るのは、1重ループの限界回数の調度1/2回を
親と子ループ双方に適用するときと言えます。
例えば、1重ループの限界回数が260回の場合、(260/2)X(260/2)で2重の最大結果16,900回を得ます。

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.004 seconds, 7 queries executed - Memory usage: 511.27 KiB (Peak: 518.8 KiB) ]