Mac上的F#:内部函数的语法错误

时间:2010-04-12 17:55:06

标签: macos f#

以下代码:

exception NoElements of string

let nth(k, list) =
    let rec loop count list = 
        match list with
        | head :: _ when count = k -> head
        | _ :: tail when count <> k -> loop (count+1) tail
        | [] -> raise (NoElements("No Elements"))
    loop 0 list
;;
printfn "%A" (nth(2, [1; 1; 2; 3; 5; 8]))

在mac上进行编译时产生以下错误,但在Visual Studio 2010中没有:

  

nth.fs(10,0):错误FS0191:语法错误。

     

nth.fs(4,4):错误FS0191:找不到与此'let'匹配的'in'。

2 个答案:

答案 0 :(得分:4)

确保使用代码顶部的轻量级语法指令

#light

(这仅适用于旧版本的编译器;请抓住newer version。)

答案 1 :(得分:0)

您需要缩进match行。

另请注意,列表元素应以分号分隔;你有一个包含六元组的单元素列表。

这是一个有效的版本:

exception NoElements of string 

let nth(k, list) = 
    let rec loop count list =  
        match list with 
        | head :: _ when count = k -> head 
        | _ :: tail when count <> k -> loop (count+1) tail 
        | [] -> raise (NoElements("No Elements")) 
    loop 0 list 

printfn "%A" (nth(2, [1; 1; 2; 3; 5; 8]))

你的mac有可能有更旧版本的F#吗? fsc.exe报告什么版本? (如果它非常老,请尝试添加“#light”作为第一行。)