Несоответствие типов Seq.unfold - PullRequest
1 голос
/ 20 марта 2012
let fibgen (x,y) = if(x < 4000000) then Some(x+y, (y, x+y)) else None

let fibseq = Seq.unfold fibgen (1,1)

Ошибка несоответствия типов во второй строке.что я делаю не так? Я использую F # 2.0

Ответ

Сначала выполнено Сбросить сеанс в моем интерактивном окне, все та же ошибка
, а затем перезапуститьМой проект работает нормально

1 Ответ

4 голосов
/ 20 марта 2012

Как указал Карстен в комментарии, код работает нормально, если вы введете его в чистом F # Interactive.Поскольку компилятор жалуется, что Option<'T> не соответствует 'T option, я думаю, что вы случайно написали некоторый код, который переопределил Some и None перед использованием функции unfold.Возможно, вы написали что-то вроде этого (и оценили это в F # Interactive):

type Option<'T> = 
  | None
  | Some of 'T

Это скрывает стандартные определения Some и None, которые являются конструкторами типа 'T option, определенного в стандарте.Библиотека F # (ожидаемая функцией unfold).

Вы можете сбросить интерактивный сеанс F #, щелкнув правой кнопкой мыши в окне и выбрав «Сбросить сеанс».Это удаляет предыдущие объявления, и код должен работать нормально.

...