【发布时间】:2014-10-05 01:56:24
【问题描述】:
大家好,我的 F# 程序遇到了一些问题。我基本上有一个未知数量的大小为 12 的浮点列表(通过读取文件和解析来处理),我想获取这些列表并将它们拆分为每个元素对应的 12 个列表。因此,例如,我希望列表中的所有第 5 个元素都进入 n5 等等。我的代码顶部有我的列表声明
let (n1: float list) = []
let (n2: float list) = []
let (n3: float list) = []
let (n4: float list) = []
let (n5: float list) = []
let (n6: float list) = []
let (n7: float list) = []
let (n8: float list) = []
let (n9: float list) = []
let (n10: float list) = []
let (n11: float list) = []
let (n12: float list) = []
递归访问器
let rec accsessline line =
if line = [] then
()
else
let (year, values) = ParseLine line.Head
(Pusher values)
accsessline line.Tail
以及在上述代码段中调用的列表填充方法(注意我的评论)
let Pusher (yearsFalls : float list) =
printfn "years falls are %f" yearsFalls.[6] //this line correctly accesses and prints the right element (6th) in each list yearsFalls.
yearsFalls.[0] :: n1
yearsFalls.[1] :: n2
yearsFalls.[2] :: n3
yearsFalls.[3] :: n4
yearsFalls.[4] :: n5
yearsFalls.[5] :: n6
yearsFalls.[6] :: n7
yearsFalls.[7] :: n8
yearsFalls.[8] :: n9
yearsFalls.[9] :: n10
yearsFalls.[10] :: n11
yearsFalls.[11] :: n12
现在一切正常,它只是我试图添加到这些不起作用的列表的部分。当我在调用上述 accessline 函数后打印出 n1-n12 列表之一时,正确的元素是 access,如我的 printfn 输出所示,它打印出每行的第 6 个元素(我的代码中唯一的注释),但是列表打印为空括号“[]”。只是实际添加到 n1-n12 列表中并没有发生。你知道我到底需要做什么才能让实施工作吗?感谢您的宝贵时间!
【问题讨论】:
-
很难弄清楚你要做什么。但是您的monthPusher () 函数返回列表(yearsFalls.[11] :: n12)。在表达式 (yearsFalls.[...] :: n...) 中构造的前 11 个列表被有效地忽略,并且对 monthPusher() 函数之外的数据没有影响
-
您建议如何进行这些更改?我尝试对我的 Pusher n1=yearsFalls.[0] 的所有行进行以下编辑:: n1 并这样做让 n1 = yearsFalls.[0] :: n1。而且它并没有真正奏效
-
很难说你想在这里做什么,但我认为你的数据结构的选择是非常不幸 - 看起来你想要一对
(year,value)好的,然后您使用这些values的方式表明这些又是不少于 12 个列表? - 但是什么是 year-falls? - 剩下的你的代码可以工作 - 当你声明 12 个空列表时,你会得到 12 个空列表 - 我建议设置断点,调试并使用类型的工具提示
标签: f#