windows – f#中的缩进问题(vs2010 beta1)
我只是在学习f#所以我可能正在做一些非常愚蠢的事情.请随意指出我的相关文档,我已经搜索但无法找到.我在
Windows 7(.Net 4.0)上使用Visual Studio 2010 beta.
我的第一个f#项目一切顺利.嗯..几乎一切.特别是 let linterp (x:double) (xvalues:double list) (yvalues:double list) = let num_els = xvalues.Length if x <= xvalues.Head then let result = yvalues.Head elif x >= (List.rev xvalues).Head then let result = (List.rev yvalues).Head else for idx in [0 .. num_els] do if List.nth xvalues idx >= x then let x0 = xvalues.Item idx let y0 = yvalues.Item idx let x1 = xvalues.Item (idx+1) let y1 = yvalues.Item (idx+1) let result = y0 + (y1-y0)/(x1-x0)*(x - x0) result 而且我收到一系列错误,完全无法理解. 这是错误和警告的列表: >“这个’let’的返回表达式中的错误.第一个,第二个和最后一个”let“可能是正确的缩进. 我将补充一点,我不得不冒出一些来注释类型,因为由于某些原因我不知道编译器能够正确推断第一个列表,但是对于第二个类型总是推断为单位此外,我的原始版本没有绑定名称结果,但只是“返回表达式”,就像在 if x <= xvalues.Head then yvalues.Head 或者在 else for idx in [0 .. num_els] do if List.nth xvalues idx >= x then let x0 = xvalues.Item idx let y0 = yvalues.Item idx let x1 = xvalues.Item (idx+1) let y1 = yvalues.Item (idx+1) y0 + (y1-y0)/(x1-x0)*(x - x0) 这会在“for”下留下一个错误,说“此表达式具有类型单位但在此处使用类型为double”,并且“if”可能错误地缩进. 我认为,当我看到解决方案时,我会感到愚蠢,但我已经被困在这么简单的问题上超过一个小时,所以我要求你的帮助. 提前致谢! ps:我已经检查过选项卡是否正确解释为工具 – > options-> …. – >中的空格. F# – >标签菜单 pps:这是关于SO的第一个问题:-) 解决方法
你的问题是这样的
let result = yvalues.Head 不是一个完整的表达式,因此它不能形成if块的一个分支的主体.你的初始方法是正确的,除了for … do循环没有返回有意义的值(它返回(),这是类型unit的唯一值,正如编译器试图解释的;这类似于void在像C#这样的语言中.而不是for循环,您将需要使用具有您正在寻找的值的表达式.对代码的最小更改是使用您在循环中强制设置的可变值.更惯用的方法是使用像List.fold这样的内置函数将列表压缩为单个值.这很复杂,因为您需要访问列表中的连续条目(并且您需要同时对xvalues和yvalues进行操作),这意味着您可能需要使用List.zip和Seq.pairwise,这可能是降低不习惯F#的人的清晰度. 此外,您还可以应用其他一些更改来使您的代码更加惯用.例如,让x0 = xvalues.Item idx更常用于写x0 = xvalues.[idx].但请注意,F#列表是不可变的链表,因此不支持快速随机访问.这是支持使用内置List运算符的方法的另一个原因. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Windows – DL380 G5上看似随机的组件在应用更新后不再工作
- windows-7 – 在Windows 7 RC中安装Vista的VHD
- 如何在Windows 7任务栏中显示进度(使用Qt)?
- 有没有办法在dll中打包多个.NET程序集?
- windows – 如何在蓝屏??后获取内存转储
- Windows Phone 7 – 在使用设备进行调试时无法启动CameraCa
- windows-server-2003 – 如何转发Windows DNS服务器中现有区
- 在Windows与Linux上托管
- batch-file – 从批处理脚本中分配IP
- windows-8 – Windows 8商店应用WinRT本地Toast通知未显示
- windows-server-2008 – 为什么任务管理器不显示
- 为什么以及什么时候需要mqtt经纪人用于IOT / M2M
- 在Windows上运行远程命令,如linux上的ssh -c
- windows – 调查内存泄漏
- Windows 7中的windows-7 – makecert.exe丢失,如
- active-directory – 如何配置非管理员帐户以使用
- Patch multi versions of windows via Power she
- Windows XP中的Python Cx_Freeze错误
- 如何在Window窗体中使用UserControl编程C#
- 使用Azure容器注册表从C#创建新的Azure容器实例