2011-06-23 112 views
2

我剛剛開始學習SML,並仍在理解其錯誤消息。嘗試輸入下面簡單的SML代碼錯誤

val rec : real->real = fn 0.0 => 0.0 | n:real => 1.0/n; 

我得到以下錯誤的函數定義時

stdIn:25.9-25.17 Error: syntax error: deleting COLON ID ARROW 
stdIn:25.24-25.33 Error: syntax error: deleting FN REAL DARROW 
stdIn:25.38 Error: syntax error found at BAR 

能有人指出我在做什麼錯?

謝謝。

回答

4

你在你的代碼的兩個錯誤:

  1. 之間val rec和類型標註應該是你定義的值的名稱。
  2. 您不能在real s上使用模式匹配。由於real s不精確,因此它們不是平等類型,所以也不能在其上使用=。您需要使用Real.==比較實數是否相等(或者更好:不要比較它們是否相等,而是將它們與某個增量相比較)。
+0

hello sepp2k。謝謝你的回答。我檢查了真實的簽名並找到了你提到的「==」功能。我雖然仍然不清楚你提到的第1點..是'rec'中的關鍵字SML(我只是選擇它作爲互惠的簡短形式) – ankit

+0

@ankit:是的,'rec'是一個關鍵字 - 它允許一個值定義是遞歸的。 – sepp2k

+0

完美。現在我已經閱讀了關於遞歸函數的章節,這是有道理的......感謝您的幫助! – ankit