这是我一直在努力解决的问题.我需要将两个排序的序列合并为一个排序的序列.理想情况下,算法应该是惰性求值的,并且不需要从每个序列中缓存多个项目.这不是一个非常难以解决的问题,我已经能够在F#中设计出许多解决方案.不幸的是,我提出的每个解决方案都存在一些问题.
使用yield!对子序列生成器的递归调用.这会产生优雅的外观解决方案,但为每个项目创建子序列都是性能杀手.
真正神秘且无法维护的代码,包含深度堆叠的匹配开关,多个几乎完全相同的代码块等.
强制F#进入纯粹程序模式的代码(许多可变值等).
所有在线示例我都能在同一个浅滩上找到创始人.
我错过了一些明显的东西:比如它真的很简单还是显然不可能?有谁知道一个非常优雅的解决方案,也是高效的,大部分功能?(它不必是纯功能性的.)如果不是,我最终可能缓存子序列,并使用列表或阵列.
我最近安装了最新一轮的Windows更新,包括.NET 4.0更新和Visual Studio更新(但不包括VS2010 SP1).从那以后,我的F#编译器运行起来非常非常慢.我认为这可能是crl.microsoft.com的这个问题,但事实证明并非如此.另外,我认为mscorsvw.exe已经完成运行.(我忘记强制它的命令,但即使机器处于空闲状态,它也不会启动.)
也:
F#编译器生成正确运行的代码,速度很慢.
C#编译器保持一如既往的速度.
还有其他人遇到过这个问题吗?
-Neil
f# ×2