指定された数のすべての素因数のリストを返す SML 関数を作成しようとしています。これは、後で別の関数のヘルパー関数になります。
本来、bigNumber は素因数を求める必要のある数値であり、その数値より 1 少ない数値を除数として渡します。これは、数 100 の素因数を見つけるためにどのように呼び出すかの例です。getPrimeFactors 100 99;
現時点では、アルゴリズムに欠陥があるかどうかはあまり心配していませんが、何かエラーを見つけた場合は、喜んで耳を傾けます.
私の主な問題は、戻り値をリストとして再帰チェーンに渡し、それらのリストを他のリストと合流させようとすることです。
fun getPrimeFactors bigNumber divisor =
if divisor > 0 then
if (bigNumber mod divisor) = 0 then List.concat(getPrimeFactors (bigNumber div divisor) ((bigNumber div divisor) - 1), getPrimeFactors divisor (divisor - 1))
else [getPrimeFactors bigNumber (divisor - 1)]
else [bigNumber];
これを実行すると、このエラーが発生します。C:.....\run.x86-win32.exe: 致命的なエラー -- ../compiler/TopLevel/interact/evalloop.sml:66.19-66.27 で発生した 0 のキャッチされない例外エラー
C:\.....\commonFactors.sml:3.39-3.160 Error: operator and operand don't agree [tycon mismatch]
operator domain: 'Z list list
operand: 'Y * 'Y
in expression:
List.concat
((getPrimeFactors (<exp> div <exp>)) (<exp> div <exp> - 1),
(getPrimeFactors divisor) (divisor - 1))
[Finished in 0.4s with exit code 1]
どんな助けでも大歓迎です!