给出以下代码:
namespace Backend
open System
open System.Linq
open Npgsql
module helpers =
let rec second_elms lst =
match lst with
| [] -> []
| (d,o)::xs -> o::(second_elms xs)
let folder acc elm =
let result_list,acc_to_substract = acc
result_list::(elm-acc_to_substract),elm
type ChartManager() =
static member ConvertOutputNumbersToDifferenceSegments(listOfOutputValuesForADay: list<DateTime*int>) =
let secs = helpers.second_elms listOfOutputValuesForADay
let trans = List.fold
helpers.folder
([],snd(secs.First()))
secs.Tail
let sndDateTime = fst(listOfOutputValuesForADay.ElementAt(1))
for each_output in fst(trans) do
yield (sndDateTime,each_output)
它给了我很多错误,但我猜大多数只是来自“trans”块中主要错误的级联错误,其中显示(突出显示单词helpers
):
绑定中的意外标识符。在此点或其他标记之前或之前的预期不完整结构化构造。
这意味着什么?
答案 0 :(得分:2)
使用轻量语法正确缩进
let trans =
List.fold
helpers.folder
([],snd(secs.First()))
secs.Tail
或
let trans = List.fold
helpers.folder
([],snd(secs.First()))
secs.Tail
如果是单个语句,要拆分多行,则需要缩进才能传递语句的开头。
答案 1 :(得分:1)
当你这样做时
let trans =
等号后=
设置新的越位列后的第一件事。只要您只在不在列的列上或之后书写,您就可以定义trans
的绑定。只要您在其左侧书写,就会回到trans
之外,在这种情况下定义成员ConvertOutputNumbersToDifferenceSegments
。
然而,当你回到外面时,你经常(*)必须一直回到以前的一些越位专栏。在这种情况下,最近的一个由l
中的let trans ...
设置。
共:
(* v ----------------- offside column set by 'let' *)
(* v------ offside column set by '='. *)
let trans = List.fold
helpers.folder (* <-- Half way back. Error. *)
...
let trans = List.fold
helpers.folder (* <-- Binding 'trans'. *)
...
let trans = List.fold
helpers.folder (* <-- Also binding 'trans'. *)
...
let trans = List.fold (* <-- Binding 'trans'. *)
helpers.folder (* <-- Binding in member `Convert...`
... Yields type error in your case. *)
有越位专栏here的简要指南。
(*)确切的规则因环境而异。
答案 2 :(得分:0)
猜测一下,由于helpers.folder
没有缩进到List.fold
我会把它改成
let trans = List.fold helpers.folder ([],snd(secs.First())) secs.Tail