Tag: f#

.Net函数调用的性能(C#F#)VS C ++

由于F#2.0已成为VS2010的一部分,我对F#感兴趣。 我想知道使用它有什么意义。 我读了一下,我做了一个测量函数调用的基准。 我用过Ackermann的函数:) C# sealed class Program { public static int ackermann(int m, int n) { if (m == 0) return n + 1; if (m > 0 && n == 0) { return ackermann(m – 1, 1); } if (m > 0 && n > 0) { return ackermann(m – 1, ackermann(m, n […]

C#中的Agent / MailboxProcessor使用新的async / await

这个问题结合了我不完全理解的两个主题 通过阅读关于F#中的异步的文章 ,我遇到了Agent / MailboxProcessors的主题,它可用于实现被动状态机。 是否可以使用C#5中的新异步/等待function来实现C#中类似的function,或者是否已经存在更适合的类似模拟?

将异步 – 等待C#代码转换为与调度程序相关的F#

我想知道这是否是一个太广泛的问题,但最近我让自己遇到了一段代码,我想确定如何从C#转换为适当的F#。 旅程从这里开始(1) (TPL-F#交互的原始问题),并继续这里(2) (我正在考虑转换为F#的一些示例代码)。 示例代码在这里重现的时间太长,但有趣的函数是ActivateAsync , RefreshHubs和AddHub 。 特别有趣的是 AddHub具有private async Task AddHub(string address)的签名。 RefreshHubs在一个循环中调用AddHub并收集一个tasks列表,然后通过await Task.WhenAll(tasks)它最终await Task.WhenAll(tasks) ,因此返回值与其private async Task RefreshHubs(object _)签名相匹配。 RefreshHubs由ActivateAsync调用,就像await RefreshHubs(null) ,最后有一个调用await base.ActivateAsync()匹配函数签名public override async Task ActivateAsync() 。 题: 将这些函数签名正确转换为F#仍然保持接口和function并尊重默认的自定义调度程序是什么? 我也不太确定这个“在F#中异步/等待”。 至于如何“机械地”做到这一点。 🙂 原因是在链接“here(1)”中似乎存在问题(我没有validation过),因为F#异步操作不遵循(Orleans)运行时设置的自定义协作调度程序。 此外, 这里指出TPL操作逃脱调度程序并转到任务池,因此禁止使用它们。 我能想到解决这个问题的一种方法是使用F#函数,如下所示 //Sorry for the inconvenience of shorterned code, for context see the link “here (1)”… override […]

在C#中运行F#代码 – (与C#中的C#一样使用Roslyn)

有没有办法在C#中运行F#代码? 我在C#中编写了一个应用程序 – 我想让它能够执行F#,读取Record对象,枚举来自F#的列表。 目前的解决方案是什么? 我知道将来可能有办法通过更新Roslyn来做到这一点。 此外,好奇如何在F#中运行F#代码,目前。 有没有办法轻松做到这一点?

是否有相当于在F#中创建C#隐式运算符?

在C#中,我可以将隐式运算符添加到类中,如下所示: public class MyClass { private int data; public static implicit operator MyClass(int i) { return new MyClass { data = i }; } public static implicit operator MyClass(string s) { int result; if (int.TryParse(s, out result)) { return new MyClass { data = result }; } else { return new MyClass { data = […]

手动编写解析器的最佳方法是什么?

我们使用ANTLR为类似SQL的语法创建解析器,虽然在大多数情况下结果令人满意,但我们需要修复一些边缘情况; 因为我们自己没有编写解析器,所以我们并不能很好地理解它,以便能够做出明智的改变。 所以,我们想编写自己的解析器。 手动编写解析器的最佳方法是什么? 我们应该使用什么样的解析器 – 建议使用递归下降; 是对的吗? 我们将用C#编写它,因此任何用该语言编写解析器的教程都会感激不尽。 更新:我也对涉及F#的答案感兴趣 – 我一直在寻找在项目中使用它的理由。

在C#中编写F#递归文件夹访问者 – seq vs IEnumerable

我经常在F#中使用这个递归的“访客” let rec visitor dir filter= seq { yield! Directory.GetFiles(dir, filter) for subdir in Directory.GetDirectories(dir) do yield! visitor subdir filter} 最近我开始在C#中实现一些F#function,我正在尝试将其重现为IEnumerable,但是我遇到的困难比这更进一步: static IEnumerable Visitor(string root, string filter) { foreach (var file in Directory.GetFiles(root, filter)) yield return file; foreach (var subdir in Directory.GetDirectories(root)) foreach (var file in Visitor(subdir, filter)) yield return file; } 我不明白为什么我必须在C#版本中为递归做一个双重foreach,而不是在F#中… seq {}是否隐含地执行’concat’?

Application.Current控制台应用程序中的“null”

我目前正在尝试使用WPF组件,该组件使用来自WPF应用程序的Application.Current,但由于几个原因我从不调用Application.Run(也不是一个选项)。 结果是NullReferenceException。 我基本上试图从控制台应用程序中显示同一个WPF窗口的多个实例。 欢迎任何建议(以及C#/ F#中的代码示例)! 提前致谢

使用Walker的Alias方法进行加权随机选择

我在找这个算法 (将从每个元素具有不同被挑选概率(权重)的元素列表中随机选择的算法) 并且发现只有python和c实现,在我做了一个C#之后,有点不同(但我认为更简单)我想我应该分享它,我也需要一个F#imlementation ,如果有人可以做到它请发表回答 using System; using System.Collections.Generic; using System.Linq; namespace ChuckNorris { class Program { static void Main(string[] args) { var oo = new Dictionary { {“A”,7}, {“B”,1}, {“C”,9}, {“D”,8}, {“E”,11}, }; var rnd = new Random(); var pick = rnd.Next(oo.Values.Sum()); var sum = 0; var res = “”; foreach (var o in oo) […]

即使Process.HasExited为true,Process.WaitForExit也不会返回

我使用Process.Start来启动批处理文件。 批处理文件使用“START”命令并行启动多个程序然后退出。 批处理文件完成后,Process.HasExited变为true,Process.ExitCode包含正确的退出代码。 但是当我调用Process.WaitForExit()时,它会挂起/永不返回。 下面的代码演示了这个问题。 它创建一个批处理文件,启动它然后打印: Process is still running… Batch file is done! Process has exited. Exit code: 123 Calling WaitForExit()… 然后它应该打印: WaitForExit returned. …但它永远不会(尽管HasExited是真的,我们已经有了一个ExitCode)。 open System.IO open System.Diagnostics open System.Threading let foobat = “”” START ping -t localhost START ping -t google.com ECHO Batch file is done! EXIT /B 123 “”” File.WriteAllText(“foo.bat”, foobat) […]