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

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

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

You are not logged in.

Announcement

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


#1 2013-10-05 17:20:40

wader
Member

List関数のEvaluateが変?

FM12です。前にどっかで見たような気もしますが
Let($i=0;
Evaluate("List(Let($i=$i+1;$i);Let($i=$i+1;$i))")
)
この結果が
2
1
になるのは、一体どうゆうわけでしょうか。
List関数は右から左へ評価する?

と書いてから思いついて、
Evaluate("List(Get(UTCmSECs);Get(UTCmSECs))")
を何度も計算すると、ほとんどは同じだけど確かにたまに右のほうが前の時刻になりました。

Offline

#2 2013-10-07 16:46:20

Lister
Guest

Re: List関数のEvaluateが変?

Evaluateは関係なくて、List(Get(UTCmSECs);Get(UTCmSECs))
をLoopで計算させると、常に1行目の方が大きいか等しいようです。

Last関数のルーチンを流用してるのかな。

「Case はそれぞれの式を順に評価」と書いてあるけど、左からとは書いてない。この場合はデフォルトが「最後」にあるから自明なんでしょうけど。
Substituteは左からと書いてあった気がしたけど、今見たら特に明記されてません。

#3 2013-10-07 22:49:52

Wader2
Guest

Re: List関数のEvaluateが変?

なるほど、Last(List(...))という場合に最適化できるようにしてるのかな?
右からというのが保証されてるなら、それはそれでいいんですが。。。

#4 2013-10-08 10:55:30

keima
Member

Re: List関数のEvaluateが変?

Let($i=0;
Evaluate("List(Let($i=$i+1;$i);Let($i=$i+1;$i))")
)
List関数は右から左へ評価する?

同じことですが、
Let($i=0;
Evaluate("List(
Let($i=$i+3;$i);
Let($i=-1;$i);
Let($i=$i+1;$i)
)")
)
だとListの順序はあってるけど、
List内のLet式の評価は下から上ですね。

Offline

#5 2013-10-08 16:15:41

himaganee
Guest

Re: List関数のEvaluateが変?

Let([
s="123";
$i=1;
$v[Let($i=$i+1;$i)]=Middle(s;$i;1)
];
$v[1] & ¶ & $v[2] & ¶ & $v[3]
)

これを見ると、$v[2]だけに1が入ってます。Letの複数の代入文は左から順と明記されてるけど、1つの代入の中では=の右を先に計算していますね。

#6 2023-10-16 21:10:48

himadanee
Guest

Re: List関数のEvaluateが変?

10年ぶりにFM19でやってみたら
List(Get ( 現在の時刻 UTC マイクロ秒 );Get ( 現在の時刻 UTC マイクロ秒 ))
やっぱり2か3大きい値が先になる...ミリでなくマイクロ秒になったので同じ値にはなりませんね。

#7 2023-10-17 09:47:56

qb_dp
Member

Re: List関数のEvaluateが変?

List関数は下から評価なんですね。

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.010 seconds, 10 queries executed - Memory usage: 508.95 KiB (Peak: 513.48 KiB) ]