2014-11-06 20 views
0

我使用emacs寫在SML的功能,當我嘗試編譯這段代碼SML錯誤插入EQUALOP

fun tryDivide small n = 
if n = 1 then true 
else if ((small mod n) = 0) then tryDivide small (n-1) 
else false 

fun lcmHelper small div = 
if tryDivide (small div) = false then lcmHelper ((small+div) div) 
else small 

(*Start by calling this*) 
fun lcm d = 
val small = d 
lcmHelper (small d) 

它應該發現,可以通過d分的最低值(LCM樂趣d ) 我很確定該算法的工作原理,但有語法錯誤。

在開始「好玩LCM d =」我知道,說「錯誤插入EQUALOP」錯誤

任何想法可能會導致什麼呢? 在此先感謝!

回答

1
fun lcm d = 
    let 
    val small = d 
    in 
    lcmHelper (small d) 
    end 
+0

它們有語法錯誤。這解決了它。讓val = ... in ... end,而不是val = ... – seanmcl 2014-11-07 11:39:58

+0

謝謝,是的,它解決了這個問題。可悲的是,似乎還有其他問題。現在它抱怨lcmHelper函數:「錯誤:右邊的子句不符合函數結果類型[tycon不匹配] 表達式_-> _-> int 結果_-> int – 2014-11-10 17:05:32

+0

看來lcmHelper有一個主機的問題,'small + div'意味着small和div是ints(禁止重載)。因此,在表達式'(small div)'中有一個類型錯誤,它試圖將div應用到small。 。當你學習sml時寫這些類型通常很有幫助,例如fun lcmHelper(small:int)(dev:int):int = ... – seanmcl 2014-11-10 17:56:29