let sub (m:double[],n:double[]) : double[]=
[| for i = 0 to Array.length m -1 do m.[i]-n.[i] |]
错误1此值不是函数且无法应用E:\ MyDocuments \ Visual Studio 2010 \ Projects \ curve intersection \ newton \ Module1.fs 27 21 newton
但是,这没关系:
let a = [| "a"; "b"; "c"; "d"; "e"; "f" |]
for i = 0 to Array.length a - 1 do
System.Console.WriteLine(a.[i])
答案 0 :(得分:7)
减号附近的空格:
f -1 // means f(-1)
使用参数f
(一元减号)调用函数-1
。而
n - 1
和
n-1
是减法。
编译器错误反映了
Array.length m -1
解析为
(Array.length m)(-1)
好像它期望第一个表达式返回一个函数,然后将其应用于值-1
。由于length实际返回int
,因此您会收到一条错误消息,指出整数不是函数,并且不能应用于参数-1
。
答案 1 :(得分:3)
编译:
let sub (m:double[], n:double[]) : double[] =
[| for i = 0 to Array.length m - 1 do yield m.[i] - n.[i] |]
答案 2 :(得分:1)
列表/数组理解的格式错误。
您使用->
作为捷径:
let a = [1;2;3]
[| for i in a -> i |]
或正式撰写yield
:
[| for i in a do yield i |]