Tag: f#

F#在“使用绝对没有意义”的地方?

Don Syme在他的SPLASH演讲中表示,F#不是为了替代C#,即使它具有一般的function。 他继续说,有些地方F#在使用上没有意义,但没有扩大论文。 有人可以告诉我什么地方应该避免使用F#? 你也可以提到C#闪耀的领域。 相关问题: 在哪些地方使用F#比C#更合适?

在产卵和查杀过程中,F#真的比Erlang快吗?

更新:这个问题包含一个错误,使基准毫无意义。 我将尝试一个比较F#和Erlang的基本并发function的更好的基准,并在另一个问题上询问结果。 我正在尝试去理解Erlang和F#的性能特点。 我发现Erlang的并发模型非常吸引人,但是由于互操作性的原因,我倾向于使用F#。 尽pipe开箱即用的F#并没有提供像Erlang的并发原语这样的东西 – 从我所知道的asynchronous和MailboxProcessor只涵盖了Erlang很好的一小部分 – 我一直在试图理解F#中可能的性能明智的。 在Joe Armstrong编程的Erlang书中,他指出在Erlang中进程非常便宜。 他使用(大致)下面的代码来certificate这个事实: -module(processes). -export([max/1]). %% max(N) %% Create N processes then destroy them %% See how much time this takes max(N) -> statistics(runtime), statistics(wall_clock), L = for(1, N, fun() -> spawn(fun() -> wait() end) end), {_, Time1} = statistics(runtime), {_, Time2} = statistics(wall_clock), lists:foreach(fun(Pid) -> […]

F#:让可变与参考

首先,我承认这个问题可能是重复的; 只是让我知道。 我很好奇什么是一般的“最佳做法”是什么时候需要可变性的情况。 F#似乎为此提供了两个工具: let mutable绑定,它似乎像“大多数”语言中的variables一样工作,而参考单元(使用ref函数创build)需要使用明确的解引用。 有两种情况是“被迫”进入其中一种情况:.NET interop倾向于使用可变的<- ,在工作stream计算中,必须使用ref := 。 所以这些情况非常明确,但是我很好奇在这些场景之外创build自己的可变variables时该怎么做。 一种风格有什么优势? (也许进一步洞察实施将会有所帮助。) 谢谢! (对于“过度使用”引号感到抱歉。)

什么是应用风格的实际用途?

我是一名Scala程序员,现在正在学习Haskell。 很容易find面向对象概念的实际用例和真实世界的例子,例如装饰器,策略模式等。书籍和网站都充斥着它。 我意识到,这不是function概念的情况。 例如: 应用程序 。 我正在努力寻找应用程序的实际使用案例。 到目前为止,我所遇到的几乎所有的教程和书籍都提供了[]和Maybe的例子。 我希望应用程序比这更适用,看到他们在FP社区的所有关注。 我想我理解申请者的概念基础(也许我错了),而且我已经等待了我的启蒙时刻。 但似乎并没有发生。 从来没有编程,我有一个时刻,我会高兴地喊,“尤里卡!我可以在这里使用应用程序! (除了[]和Maybe )。 有人可以指导我如何在日常编程中使用应用程序吗? 我如何开始发现模式? 谢谢!

方便的F#片段

已经有两个有关F#/function片段的问题。 然而,我在这里寻找的是有用的片段,可以重复使用的小“辅助”function。 或者模糊,但漂亮的模式,你永远不会记得。 就像是: open System.IO let rec visitor dir filter= seq { yield! Directory.GetFiles(dir, filter) for subdir in Directory.GetDirectories(dir) do yield! visitor subdir filter} 我想使这是一个方便的参考页面。 因此,没有正确的答案,但希望有很多好的答案。 编辑 Tomas Petricek创build了一个专门为F#片段http://fssnip.net/网站 。

命名空间和F#中的模块有什么区别?

我刚刚开始学习F#(之前对.NET没有多less经验),所以原谅我可能是一个非常简单的问题:F#中的命名空间和模块之间的区别是什么? 谢谢 戴夫 编辑:感谢您的答案布赖恩。 这就是我想知道的。 只是澄清:你也可以打开一个命名空间(类似于C#使用语句)?

F#显式匹配与函数语法

对于模糊的标题感到抱歉,但这个问题的一部分是这两种语法风格被称为: let foo1 x = match x with | 1 -> "one" | _ -> "not one" let foo2 = function | 1 -> "one" | _ -> "not one" 另一部分是两者之间有什么区别,什么时候我想要使用其中之一?

为什么F#的types推断如此变幻莫测?

F#编译器似乎以(相当)严格的从上到下,从左到右的方式执行types推断。 这意味着你必须做一些事情,比如把所有的定义放在使用之前,文件编译的顺序是非常重要的,而你往往需要重新排列一些东西(通过|>或者你有什么)来避免显式的types注释。 如何使这个更加灵活,并且计划将来的F#版本呢? 显然这是可以做到的,因为Haskell(例如)对同样强大的推理没有这样的限制。 F#的devise或意识形态有什么本质上的不同吗?

如何编组multidimensional array

我们有一些涉及matrix的互操作代码。 我试图调用本地DLL,并在大多数情况下,它的工作非常可靠。 我依靠.net的默认编组 ,避免非托pipe指针,而大多数情况下使用.net数组,并可能在这里和那里的一个byref 。 .net文章说,multidimensional array被隐含地编组为列主要的一维数组,这将是很好的。 唯一不起作用的是试图编组一个multidimensional array,因为F#编译器抱怨在extern声明中不允许使用float[,] 。 有没有办法解决这个限制? 我知道来自F#PowerPack的PinnedArray和PinnedArray2types,但是我正在寻找一个依赖托pipe指针的解决scheme,更重要的是,我想避免将F#PowerPack作为依赖包含在PinnedArray类中。

纯函数在C#中

我知道C#正在获得大量的并行编程支持,但是AFAIK仍然没有用于副作用validation的构造,对吧? 我认为现在已经布置了C#更复杂了。 但有没有计划让这个? 或者,F#是唯一一个构build了副作用validation的.NET语言?