我正在嘗試編寫一個SML函數,它將返回給定數字的所有素數因子列表。這將最終成爲稍後其他功能的輔助函數。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:致命錯誤 - 未捕獲的異常錯誤0 在../compiler/TopLevel/interact/evalloop.sml:66.19-66.27
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]
募集
任何幫助將不勝感激!
謝謝!從()更改List.concat到[]並且很好。我對SML很陌生,很難找到好的資源,似乎比其他語言少得多。 –
我可以推薦[這本書](http://www.amazon.com/Introduction-Programming-International-Computer-Science/dp/0201398206)。 – Tayacan