正如Reed所提到的,函数可以在模块中定义,也可以在其他ML语言中定义,但它们也可以像其他.NET语言一样在类型上定义(实际上模块也可以编译为类).在F#中,可以open编辑模块以访问函数,而无需每次都使用模块名称,并且如果未显式声明模块,则会在每个文件的基础上自动创建模块.
至于为什么有单独的cos等功能而不仅仅依赖于.NET的内置Math.Cos等,可能有以下几个原因:
cos在F#中看起来比调用静态方法更惯用System.Math.Cos.cos不仅适用float于F#中的s,它还适用于float32s和任何暴露静态Cos方法的类型,因此您可以创建自己的类型,cos可以应用该函数.我猜测不允许使用真正的自由函数,因为有许多.NET语言没有公开对它们的方便访问,因此使用它们会对跨语言的互操作性造成障碍.CLR本身确实支持自由函数,而某些语言(如C++/CLI)确实使用它们,但是大多数语言将函数编译成类(即使从源代码的角度来看它不是这样的,如在F#中).