我刚刚学习f#,所以可能我做的事情非常愚蠢。随意将我指向相关文档,我已经搜索但无法找到。我在Windows 7(.Net 4.0)上使用Visual Studio 2010测试版。f#中的缩进问题(vs2010 beta1)
一切顺利,我的第一个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
,我收到了一系列完全逃避我的理解错误。
这是错误和警告的列表:
“的错误在返回表达这个‘让’可能正确的缩进。”为第一,第二和最后一个“让”。
“可能不正确缩进:该令牌是越位上下文开始于位置(39:10)尝试缩进该令牌还或使用标准格式约定”为“如果”
“不完整的结构化构建体在表达的最后一行(结果)“中或之前。
我补充一点,我不得不把汗有点注释类型,因为某种原因不明给我的编译器能够正确地推断出第一列表,但对于第二类型总是推断为单位另外,我原来的版本没有名字绑定的结果,而是简单地“返回的表达”,就像在
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:我已经检查了标签被正确地解释为在工具 - >选项空间 - > ... - > F# - >选项菜单
PPS:这是我对SO的第一个问题:-)
我很惭愧,但在代码中出现了明显的错误---)这证明我太老,无法在深夜编码。 为此,由于idx表示第一个大于或等于x的项,所以'let x0 = xvalues.Item(idx - 1)'和'let x1 = xvalues.Item idx'。 – Francesco 2009-08-20 08:55:42