みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
ページ: 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
)
編集者 Shin (2023-09-12 12:16:13)
オフライン
"が2か所抜けてますね。
""の中の改行は実際には半角スペースとみなされるので、場合によっては要注意です。
Advancedならデータビューアはありますよね。フィールドを使ってない計算式なのでそこにコピペしてみればすぐに動作確認できますよ。
$saiki =
で代入するCase関数はEvaluateするためのものなので""の中に入れる必要があります。
ページ: 1