gpt4 book ai didi

F#:为什么同时拥有 '::'和 '@'

转载 作者:行者123 更新时间:2023-12-04 03:10:31 25 4
gpt4 key购买 nike

我最近开始阅读有关F#的文章,显然我很快就遇到了一个新手级别的问题。它是关于列表(集合)的。

根据F#手册,有两个操作来构造列表,它们是cons(aka ::)和@。鉴于@具有更多用途(与cons操作不同,它可以合并子列表,而不是单个元素,并且也可以追加到尾部),我的问题是:在哪种情况下,我们必须使用::而不是@来避免模棱两可,还是不需要的副作用等等?

换句话说:::在理论上是否多余?

最佳答案

list类型具有两个构造函数:[]::。如果删除了::,将仅保留[]构造函数,从而无法创建非空列表。

请注意,类似[1;2;3]的东西是1::2::3::[]的语法糖,因此它依赖于::的存在。

同样,@是使用::定义的函数,因此,如果::不存在,那么@也不会。

请注意,@不适合替换::定义中的list,因为,如果您尚无构造非空列表的方法,则无法使用@创建它们([] @ []仍然为空列表)。

即使您为单项列表添加了一个构造函数,@也会导致模棱两可的表示,因为[1;2;3]可以表示为([1] @ [2]) @ [3][1] @ ([2] @ [3])(再加上,您可以在所需的任何位置添加@ [])。因此,您最终将获得语义上等效列表的几种不同表示形式。

关于F#:为什么同时拥有 '::'和 '@',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50493984/

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