Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F#List.length是否始终返回1?_List_F# - Fatal编程技术网

F#List.length是否始终返回1?

F#List.length是否始终返回1?,list,f#,List,F#,为什么我得到下面这样的输出 > List.length [1,2,3];; val it : int = 1 > List.length [1,2,3,4];; val it : int = 1 我期望得到3分和4分!我是否使用了错误的函数调用?这与函数无关,而是与您输入列表项的方式有关。您使用,而不是 > List.length [1,2,3];; val it : int = 1 > List.length [1;2;3];; val it : int = 3 原

为什么我得到下面这样的输出

> List.length [1,2,3];;
val it : int = 1
> List.length [1,2,3,4];;
val it : int = 1

我期望得到3分和4分!我是否使用了错误的函数调用?

这与函数无关,而是与您输入列表项的方式有关。您使用
而不是

> List.length [1,2,3];;
val it : int = 1
> List.length [1;2;3];;
val it : int = 3
原因是
[1,2,3]
是一个元组列表,只有一项:

> [1,2,3];;
val it : (int * int * int) list = [(1, 2, 3)]
请参见输出中的
(..)
——遗憾的是,您可以在不输入
(..)
的情况下输入元组,而且许多人都喜欢它

如果您使用
相反,您会得到一个包含3个元素的int列表:

> [1;2;3];;
val it : int list = [1; 2; 3]

为什么元组括号的可选性会是一件悲哀的事情?无需使用该样板文件:-)一旦列表用于更有意义的内容,类型将防止此类错误。在我看来,这是一个一致性的问题,也是一个可读性的问题-当您将输入
[1,2,3]
[(1,2,3)]
(与输出一样)-哪一个更清楚此外,这是经常发生的一个常见错误,尤其是如果你知道Haskell、Javascript或Python之类的东西,它们都使用
…可读性也是上下文的函数。这里我要用括号括起来。例如,在函数签名中,使用带类型注释的元组,将它们省略(在这里和那里保持一致)可能更具可读性。对于新开发人员来说,
(1,“a”):int*string
,即
*
的对比起初也很困难。但在我看来,一门语言应该根据你在初始学习曲线之前能做什么(例如,漂亮的DSL)来评分(考虑到安全性不受影响)。与其他所有工具一样,还需要学习如何避免过度使用(例如Scala集合操作符)。如果你愿意,我们可以在别处讨论这个问题,但我认为这里的注释部分不是一个好地方经验法则是,在F#中,逗号是一个创建或分解元组的运算符。撇开泛型类型定义不谈,这就是它所做的一切。下面回答了这个问题,但请不要感到难过。这是一个非常常见的错误:)