2010-08-25 109 views
3
let sub (m:double[],n:double[]) : double[]= 
    [| for i = 0 to Array.length m -1 do m.[i]-n.[i] |] 

錯誤1這個值不是一個函數並且不能應用於E:\我的文檔\的Visual Studio 2010 \項目\曲線相交\牛頓\ Module1.fs 27 21牛頓爲什麼我的代碼不能編譯?

但是,這是確定:

let a = [| "a"; "b"; "c"; "d"; "e"; "f" |] 

for i = 0 to Array.length a - 1 do 
    System.Console.WriteLine(a.[i]) 

回答

7

周圍的空間減號事情:

f -1 // means f(-1) 

使用參數-1(一元減號)調用函數f。而

n - 1 

n-1 

是減法。

編譯器誤差反映

Array.length m -1 

解析作爲

(Array.length m)(-1) 

好像它期待第一個表達式來返回一個函數,那麼其將被應用到的值-1。由於長度實際上返回int,您會收到錯誤消息,指出整數不是函數,也不能應用於參數-1

+1

作爲一個社論不談,我認爲這是唯一一個我發現有意思/煩人的空白空間的地方。在其他情況下,我喜歡它。 – Brian 2010-08-25 03:37:47

+0

也許如果我花時間寫出詳細的答案,人們會更多地接受他們。 :) – ChaosPandion 2010-08-25 16:59:17

3

這編譯:

let sub (m:double[], n:double[]) : double[] = 
    [| for i = 0 to Array.length m - 1 do yield m.[i] - n.[i] |] 
+0

@Begtostudy - 沒問題。 – ChaosPandion 2010-08-25 03:08:15

1

列表/數組理解的格式是錯誤的。

你要麼使用->作爲一個捷徑:

let a = [1;2;3] 
[| for i in a -> i |] 

或正式致函yield

[| for i in a do yield i |]