List [0;1;2;3;4;5]和[0,1,2,3,4,5]之间有什么区别?

List [0;1;2;3;4;5]和[0,1,2,3,4,5]之间有什么区别?,list,f#,List,F#,我知道如何列一张清单: let f n = let out_listA = [ 0 .. (n - 1) ] let out_list = out_listA |> List.reduce (fun state item -> state + ", " + item) out_list 我正在进行在线练习,其中包括在n=5时打印如下内容 [0, 1, 2, 3, 4, 5] 而不是 [0; 1; 2; 3; 4; 5] 从web上看,

我知道如何列一张清单:

let f n = 
    let out_listA = [ 0 .. (n - 1) ]
    let out_list =
        out_listA |> List.reduce (fun state item -> state + ", " + item) 
    out_list
我正在进行在线练习,其中包括在
n=5
时打印如下内容

[0, 1, 2, 3, 4, 5]
而不是

[0; 1; 2; 3; 4; 5]
从web上看,逗号分隔的输出似乎是一个转换为字符串的列表

所以,我的问题是,
[0,1,2,3,4,5]
代表什么,以及在从分号分隔的列表转换为逗号分隔的列表时实际发生了什么

结语:

费奥多·索金的评论是正确的;我很困惑

事实证明,逗号分隔列表是一种在数组括号内打印分号分隔列表作为逗号分隔列表的方法

以下解决方案来自github:

open System

[<EntryPoint>]

let main argv = 
    let s = Console.ReadLine() |> int
    seq { for i in 1..s do yield i }
    |> Seq.fold (fun s i ->
        if s = "" then sprintf "%i" i
        else sprintf "%s, %i" s i) ""
    |> (fun s -> sprintf "[%s]" s)
    |> Console.WriteLine

0 // return an integer exit code
开放系统
[]
让主argv=
设s=Console.ReadLine()|>int
seq{1..s中的i产生i}
|>顺序折叠(趣味s i->
如果s=”“,则sprintf“%i”i
else sprintf“%s,%i”s i
|>(乐趣->sprintf“[%s]”s)
|>控制台写入线
0//返回整数退出代码
我以为名单已经改了。它被转换成一个字符串,包含方括号和括号内以逗号分隔的数字列表。

在F#中,逗号是元组的分隔符

所以当你看到这样的东西:

match x, y with
| 1.1, 2.2 -> doSomething()
| 2.2, 3.3 -> doSomethingElse()
| _ -> defaultAction()
那是英语的简写

match (x, y) with
| (1.1, 2.2) -> doSomething()
| (2.2, 3.3) -> doSomethingElse()
| _ -> defaultAction()
因此,实际上,数组
[0,1,2,3,4,5]
只包含一个元素:元组
(0,1,2,3,4,5)
。要验证这一点,请尝试在REPL中执行此快速测试:

let test = ([0, 1, 2, 3, 4, 5] = [(0, 1, 2, 3, 4, 5)])
附录

事实上,F#交互式窗口是回答类似问题的一个非常好的工具。除了上面的测试之外,您还可以简单地高亮显示以下行并按Ctrl+Enter键:

let value1 = [0; 1; 2; 3; 4; 5]
let value2 = [0, 1, 2, 3, 4, 5]
输出是

val value1 : int list = [0; 1; 2; 3; 4; 5]
val value2 : (int * int * int * int * int * int) list = [(0, 1, 2, 3, 4, 5)]

这非常简洁地回答了这个问题。与F#的本质一样,它用两行字重复了我冗长的回答。

你刚才不是回答了你自己的问题吗?所以,我的问题是[0,1,2,3,4,5]代表什么?从web上看,逗号分隔的输出似乎是一个转换为字符串的列表。@Sehnsucht只是它没有将列表转换为字符串。我本来打算解释的,但是罗布打了我,所以请看下面他的回答。@Kittoes0124请看我对他的回答的评论answer@Sehnsucht我误解了习题集是什么。除了这里没有涉及元组,那不可能,它需要以某种方式将列表折叠成长度不断增加的元组,这是不可能的,因为folder函数每次都必须返回相同的类型只要在F#interactive中计算[0,1,2,3,4,5]。[0]。@Sehnsucht,Rob正确地回答了OP的问题“那么,我的问题是[0,1,2,3,4,5]代表什么?”。是的,OP有点困惑,但我认为这是一个足够好的答案,至少从一开始。结果是val it:int*int*int*int*int*int=(0,1,2,3,4,5)我不是说我们不能用一个6长度元组的项来做函数;但是我们不能通过折叠从6个项目的列表中构造它。我也没有说答案是错误的,它描述了什么是一个元组列表。我只是指出,在给定的上下文中,所描述的问题(特别是OP问题的第二部分)与元组几乎没有关系