2014-11-16 2 views
3

Я довольно новичок в F #, поэтому вопрос может быть довольно элементарным. Тем не менее, я не мог найти никаких предложений о ТАК.F #: Создание набора целых чисел из пользовательского ввода

Я играю с алгоритмической задачей в F #. В качестве первого шага я хочу создать коллекцию целых чисел из ввода пользовательской консоли. Количество входов не определено. И я не хочу использовать любые петли while. Я бы предпочел как можно больше идиоматического подхода.

В рекурсивной функции я читаю результат и разбираю его с Int32.TryParse. Я сопоставляю результат bool с помощью match ... with. В случае успеха я добавляю новое значение в коллекцию. В противном случае я возвращаю коллекцию.

Ниже мой код:

let rec getNumList listSoFar = 
    let ok, num = Int32.TryParse(Console.ReadLine()) 
    match ok with 
     | false -> listSoFar 
     | true -> getNumList num::listSoFar 

let l = getNumList [] 

И Я получаю ошибку:

Несоответствие типа. Ожидая «в
, но учитывая » список

Я знаю, я использую типы неправильно, хотя я не понимаю, что именно не так. Любое объяснение высоко ценится.

ответ

5

В филиале матча

| true -> getNumList num::listSoFar 

Вы должны использовать круглые скобки:

| true -> getNumList (num::listSoFar) 

Поскольку применение функции имеет более высокий приоритет, чем оператор ::