首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型失配Seq.unfold

类型失配Seq.unfold
EN

Stack Overflow用户
提问于 2012-03-20 14:13:24
回答 1查看 207关注 0票数 1
代码语言:javascript
复制
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

回答

第一次在我的交互窗口上完成重置会话仍然是相同的错误

然后重新开始我的项目现在运转良好。

是的,我在同一个会话中执行了下面的代码

代码语言:javascript
复制
// The option type is a discriminated union.
type Option<'a> =
    | Some of 'a
    | None




Interactive window Output as below

val fibgen : int * int -> Option<int * (int * int)>

> 


Eluer2.fs(27,25): error FS0001: Type mismatch. Expecting a
    int * int -> ('a * (int * int)) option    
but given a
    int * int -> Option<int * (int * int)>    
The type '('a * (int * int)) option' does not match the type 'Option<int * (int * int)>'
> 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-20 14:23:03

正如Carsten在评论中指出的那样,如果您在干净的F#互动中输入代码,那么代码工作得很好。由于编译器抱怨Option<'T>'T option不匹配,我想您在使用unfold函数之前意外地编写了一些重新定义SomeNone的代码。也许您编写了类似这样的东西(并在F#互动中对其进行了评估):

代码语言:javascript
复制
type Option<'T> = 
  | None
  | Some of 'T

这隐藏了SomeNone的标准定义,它们是标准F#库中定义的'T option类型的构造函数(并且是unfold函数所期望的)。

您可以通过右键单击窗口并选择“重置会话”来重置F#交互会话。这将删除以前的声明,代码应该可以正常工作。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9788496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档