gpt4 book ai didi

syntax - 这两个 F# 序列有什么区别?

转载 作者:行者123 更新时间:2023-12-02 07:14:25 27 4
gpt4 key购买 nike

> seq { for i in 0..3 do yield float i };;
val it : seq<float> = seq [0.0; 1.0; 2.0; 3.0]
> seq [ for i in 0..3 do yield float i ];;
val it : seq<float> = [0.0; 1.0; 2.0; 3.0]

附注为什么 F# 最初期望序列没有“seq”前缀,但现在他们想要前缀?

最佳答案

对您发布的两个表格的更多说明:

第一个使用直接序列理解,“seq { ... }”。 “seq”部分以前是可选的,但将来不会支持。我想这会让“async { ... }”之类的事情和工作流程语法变得更加困难。

现在,第二个是一个纯列表:

> let x = [ for i in 0..3 do yield float i ];;

val x : float list

“seq”也是一个函数:

> seq;;
val it : (seq<'a> -> seq<'a>) = <fun:clo@0_1>

由于任何列表也是一个序列,因此执行“seq [1;2;3;]”只是将 seq 函数应用于列表。这有点像从列表类型将其转换为 seq。

> x;;
val it : float list = [0.0; 1.0; 2.0; 3.0]

> seq x;;
val it : seq<float> = [0.0; 1.0; 2.0; 3.0]

编辑:seq 函数的来源是:

let seq (x : seq<_>) = (x :> seq<_>)

因此,“有点像强制转换”应该读作“通过辅助函数强制转换”。至于括号内序列的打印,我认为这只是一个 pretty-print 工件。

关于syntax - 这两个 F# 序列有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/616973/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com