みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
letの勉強を兼ねて、計算式で階乗を実装しようと思ったのですがなかなかうまくいきません。間違いを指摘いただけると幸いです。
下記はn=3として3の階乗を求めようとしているものです。
// 階乗
Let (
[
$n = 3 ;
$ans = 1;
$saiki = "
Case(
$n > 1;
Let (
[
$ans = $ans * $n ; $n = $n - 1
] ;
evaluate($saiki);
$n = 1;
$ans
)
"
];
Evaluate ( $saiki )
)
再帰をしたいなら、LetよりWhileかカスタム関数を勉強した方がいいですよ。
Evaluteを使った再帰はWhileがなかったころの苦肉の策です。(Whileより効率がいいケースもあった気がしますが)
$saikiの中のLetの使い方が間違ってますね。[]のあとは結果を計算する式を1つしか書けません。
環境は?
括弧の位置や関係がおかしいですね。インデントを入れて、見易いように整形すると、あとで楽です。
Let(
[
$n = 3 ;
$res = 1 ;
$rec =
"Case (
$n = 1 ; $res ;
Let(
[
$res = $res * $n ;
$n = $n - 1
] ;
Evaluate ( $rec )
)
)"
] ;
Evaluate ( $rec )
)While (
[
$n = 3 ;
$res = $n
] ;
$n > 1 ;
[
$n = $n - 1 ;
$res = $res * $n
] ;
$res
)Last edited by Shin (2023-09-12 12:16:13)
Offline
二番目のLet関数の「)」閉じかっこがありませんよ
Offline
二番目のLet関数の「)」閉じかっこがありませんよ
の通りでした。
みなさま、ありがとうございました。
環境がpro advance 17ということもあり、whileが使えませんでした。
再帰の勉強にはなったかなと思います。
また今まではfilemaker内で計算式を作っていましたが、
今後は自動インデント付きの環境で行うことにします。
追記
これはfor文での階乗の実装かと思われますが、再帰関数で実現したく現在はそちらの勉強をしています。
Last edited by すぎほ (2023-09-13 17:10:19)
Offline
自動インデンとは、なかなか使いにくいですよ。上の式は、手動でインデンと入れています。
Offline
追記
これはfor文での階乗の実装かと思われますが、再帰関数で実現したく現在はそちらの勉強をしています。
以下の通りになりました。みなさまありがとうございました。
let(
[
$n = 5;
$saiki = case(
$n = 1;
1;
$n > 1;
let(
[
$n = $n -1
];
($n + 1) * evaluate($saiki)
)
)
];
evaluate($saiki)
)Offline
"が2か所抜けてますね。
""の中の改行は実際には半角スペースとみなされるので、場合によっては要注意です。
"が2か所抜けてますね。
""の中の改行は実際には半角スペースとみなされるので、場合によっては要注意です。
二つ目の計算式の話ですかね? どこかわからずすみません。
> ""の中の改行は実際には半角スペースとみなされるので、場合によっては要注意です。
知らなかったです、ありがとうございます。
Offline
計算式を""で囲わなきゃいけない、ということですかね?
Offline
Advancedならデータビューアはありますよね。フィールドを使ってない計算式なのでそこにコピペしてみればすぐに動作確認できますよ。
$saiki =
で代入するCase関数はEvaluateするためのものなので""の中に入れる必要があります。
データビューア、知らなかったです。使ってみますありがとうございます。
""について、入れなくてもなぜか動いてしまったのですが、こういう時が一番厄介ですね、気を付けます。
Offline
> ""について、入れなくてもなぜか動いてしまった
"" 無いと、結果がおかしいですよ。
Case() の中の、8行目は、除外されたデフォルト条件になるので、省略してもいいです。
Last edited by Shin (2023-09-14 10:53:45)
Offline
失礼しました。もう一度実行してみたところ、おかしな挙動になりました。
自分の勘違いでした。
ありがとうございました。
Offline
Pages: 1
[ Generated in 0.007 seconds, 9 queries executed - Memory usage: 568.1 KiB (Peak: 584.64 KiB) ]