2009-12-15 3 views
0

Это не работает ... Я получаю ошибку FS0001: Тип 'string' несовместим с типом 'seq' для последней строки. Зачем?Этот код F # не работает

let rec Parse (charlist) = 
    match charlist with 
    | head :: tail -> printf "%s " head 
        Parse tail 
    | [] -> None 

Parse (Seq.toList "this is a sentence.") |> ignore 
+2

Seq работает с последовательностью, а строка не является последовательностью. – Lazarus

+0

может кто-то угодить «Редактировать» название этого вопроса .. сделать это проще. thx – bastianneu

+0

@Lazarus - строка - это последовательность, но это последовательность символов, в которой предполагаемый тип Parse требует последовательности строк. – kvb

ответ

2

Проблема заключается в том, что printf "%s " head означает, что head должен быть string, но вы на самом деле хотите, чтобы это было char, так что вы увидите, что Parse имеет выведенный тип string list -> 'a option. Поэтому F # ожидает, что Seq.toList применяется к string seq, а не к string.

Простым решением является изменение линии, выполняющей печать, до printf "%c " head.

Смежные вопросы