F # на Mac: синтаксическая ошибка внутренней функции - PullRequest
1 голос
/ 12 апреля 2010

следующий код:

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: не найдено подходящих «in» для этого «let».

Ответы [ 2 ]

4 голосов
/ 12 апреля 2010

Убедитесь, что вы используете легкую синтаксическую директиву в верхней части кода

#light

(Это необходимо только для старых версий компилятора; возьмите более новую версию .)

0 голосов
/ 12 апреля 2010

Вам нужно сделать отступ в строке 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» в качестве первой строки.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...