2014-11-09 1 views
0

мой код выглядит следующим образом:Visual Studio - F # - FS0588 Error: Блок ниже этого "давайте незавершенной

type appointment= 
|Probationary of int 
|Fixed 

type GradeLevel = 
    | Junior_Dev of appointment 
    | Dev 
    | Senior_Dev 
    | PM 
    | Architect of int 

type person = {gradeLevel: GradeLevel ; title: string; salary: float; name: string} 


let John_C = {gradeLevel=Dev; title="Hamster..."; salary= 3500000.0; name= "John Connor"} 
let James_J = {gradeLevel=Junior_Dev (Probationary 3); title="Gofer"; salary= 3500000.0; name= "James Joyce"} 


let splitter (EmpList: person list) = 
    let rec splitter remaining (j,d,s,p,a) = //HERE IS THE LINE OF THE ERROR 
     match remaining with 
     | [] -> (j,d,s,p,a) 
     | x::xs -> 
      match x.gradeLevel with 
      | Junior_Dev w -> splitter xs (x::j, d, s, p, a) 
      | Dev -> splitter xs (j, x::d, s, p, Arch) 
      | Senior_Dev -> splitter xs (j, d, x::s, p, a) 
      | PM -> splitter xs (j, d, s, x::p, a) 
      | Architect w -> splitter xs (j, d, s, p, x::a) 
    splitter EmpList ([],[],[],[],[]) 

Я не могу найти мою ошибку на этой линии. В основном с сплиттером: я хочу взять список сотрудников и вернуть кортеж со списками Gradelevel ... Поэтому я мог видеть все мои разработчики и PM отдельно, используя эту функцию.

Все, что вы видите не так? Спасибо

+0

Я подозреваю, что уровень отступов вызова 'splitter' неверен. Убедитесь, что он находится на том же уровне, что и определение 'splitter'. – Lee

+0

Проверьте пробелы - возможно, вы смещены «let rec ...» и вызов «сплиттера» – Petr

+1

Невозможно воспроизвести; единственная ошибка, которую я получаю при вставке, заключается в том, что 'Arch' не определен. Я не могу не заметить, что ваше использование пробелов очень непоследовательно. Только смещения случаев «GradeLevel» и области «match x.gradeLevel» следуют стандартным форматированием F #. Как сказал Ли и Петр, это, вероятно, будет проблемой с отступом. – Vandroiy

ответ

0

Этот код компилирует для меня:

type appointment= 
    | Probationary of int 
    | Fixed 

type GradeLevel = 
    | Junior_Dev of appointment 
    | Dev 
    | Senior_Dev 
    | PM 
    | Architect of int 

type person = {gradeLevel: GradeLevel ; title: string; salary: float; name: string} 


let John_C = {gradeLevel=Dev; title="Hamster..."; salary= 3500000.0; name= "John Connor"} 
let James_J = {gradeLevel=Junior_Dev (Probationary 3); title="Gofer"; salary= 3500000.0; name= "James Joyce"} 


let splitter (EmpList: person list) = 
    let rec splitter remaining (j,d,s,p,a) = 
     match remaining with 
     | [] -> (j,d,s,p,a) 
     | x::xs -> 
      match x.gradeLevel with 
      | Junior_Dev w -> splitter xs (x::j, d, s, p, a) 
      | Dev -> splitter xs (j, x::d, s, p, a) 
      | Senior_Dev -> splitter xs (j, d, x::s, p, a) 
      | PM -> splitter xs (j, d, s, x::p, a) 
      | Architect w -> splitter xs (j, d, s, p, x::a) 
    splitter EmpList ([],[],[],[],[]) 

я заменил Arch в исходном коде с a.