为什么在F#中重新定义了一些通用标准?
几天前我就开始了F#,我不明白为什么一些很长时间以来很常见的事情被重新定义了为什么在F#中重新定义了一些通用标准?,f#,F#,几天前我就开始了F#,我不明白为什么一些很长时间以来很常见的事情被重新定义了 例如,/*我的评论*/在几种语言中都很常见,几十年来一直如此;是否真的有理由使用(*我的评论*) 使用类型variablename定义变量(例如int i)也是很常见的,如果将类型保留在前面而不是后面,解析会更困难吗 类似地,在几乎所有的语言中都有=不平等;是将其更改为以避免与其他内容发生冲突,还是只是为了“与众不同” 使用 几天前我就开始了F#,我不明白为什么一些很长时间以来很常见的事情被重新定义了 例如,/*m
- 例如,
在几种语言中都很常见,几十年来一直如此;是否真的有理由使用/*我的评论*/
(*我的评论*)
- 使用
定义变量(例如类型variablename
)也是很常见的,如果将类型保留在前面而不是后面,解析会更困难吗int i
- 类似地,在几乎所有的语言中都有
=代码>不平等;是将其更改为
以避免与其他内容发生冲突,还是只是为了“与众不同” - 使用
几天前我就开始了F#,我不明白为什么一些很长时间以来很常见的事情被重新定义了
- 例如,/*my comment*/在几种语言中很常见,几十年来一直如此;真的有理由同意我的评论吗
/(*
是ML的注释语法。ML设计于20世纪70年代初。然而,使用括号表示注释更为古老,例如,Pascal使用了*)
/{*
,Algol-68使用了*}
/{
,在这之前,将注释放在方程或证明旁边的括号中的时间要长得多 例如,Newspeak是一种非常新的语言,它也使用}
/(*
*)
- 使用'type variablename'定义变量,例如'int i'也是很常见的,如果将类型保留在之前而不是之后,解析会更困难吗
type Age<'T> = Age of 'T let f (Age x) = x // deconstruct let g (Age x: Age<int>) = x // deconstruct + type info let h (x: Age<int>) = x // only type info
type age我相信其中大部分来自OCaml.F♯ 使用与它所基于的语言(OCaml、Caml、Standard ML等)相同的语法。他们为什么要重新定义这些标准?关于为什么类型放在名称后面,请参见“是”,但当该族♯ 属于我们设计的。那么,ML家族如何复制C家族的语法呢?说到起源。ML、Smalltalk、SQL、Prolog和C都是在70年代早期创建的。影响现代语言Clojure的Lisp创建于60年代初。因此,对于我们今天在2019年看到的所有编程范例,我们似乎都在70年代实现了。一个小小的更正:Haskell实际上使用了
来解决不平等问题谢谢,修复了。我想我把它和Scala中的等式类型混淆了,后者使用了名为/=
,由于Scala的类型构造函数中缀语法,可以编写=”的泛型特征(类型构造函数)=[A,B]
。A=!=B