小编Yin*_*Zhu的帖子

如何将文件读入F#中的seq行

这是C#版本:

public static IEnumerable<string> ReadLinesEnumerable(string path) {
  using ( var reader = new StreamReader(path) ) {
    var line = reader.ReadLine();
    while ( line != null ) {
      yield return line;
      line = reader.ReadLine();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但直接翻译需要一个可变的变量.

f#

53
推荐指数
5
解决办法
3万
查看次数

.Net中的非常大的集合会导致内存不足异常

我正在测试.Net中的集合有多大.从技术上讲,任何集合对象都可以增长到物理内存的大小.

然后,我测试的服务器,它具有16GB内存下面的代码,运行Windows 2003 Server和Visual Studio 2008,我测试两个F#和C#代码,看了看任务管理器运行时.我可以看到,在增加2GB内存之后,该程序因内存不足异常而崩溃.我确实在属性页面中将目标平台设置为x64.

open System.Collections.Generic

let d = new Dictionary<int, int>()

for i=1 to 1000000000 do
    d.Add(i,i)
Run Code Online (Sandbox Code Playgroud)

我对C5集合库进行了相同的测试.结果是C5中的字典可能耗尽整个内存.代码使用C5:

let d = C5.HashDictionary<int, int> ()
for i=1 to 1000000000 do
    d.Add(i,i)
Run Code Online (Sandbox Code Playgroud)

谁知道为什么?

.net c# f# gcallowverylargeobjects

32
推荐指数
3
解决办法
2万
查看次数

查找数组中的前N个元素

在无序列表(例如100)中找到前N个(比如10个)元素的最佳解决方案是什么.

我头脑中的解决方案是1.使用快速排序对其进行排序,2.获得前10名.

但还有更好的选择吗?

java sorting algorithm

29
推荐指数
3
解决办法
6万
查看次数

学习OCaml和F#的好项目

在学习了基本语法之后,阅读一些非平凡的代码是学习语言的快捷方式.我们还可以学习如何在阅读其他代码时设计库/软件.

我有以下清单.

  1. 一个国际象棋中的OCaml程序通过托梅克Czajka.

  2. HalDaumé 在Ocaml 写了几个机器学习库.包括决策树,逻辑回归和SVM.所有这些都是接近生产质量的代码.

  3. 一个国际象棋博弈分析程序在F#在微软研究院.

以上三个是我的最爱.你会建议一些其他来源吗?通用的开源软件都很好,专门的开源就像我在这里列出的三个更受欢迎.

f# ocaml

25
推荐指数
3
解决办法
8996
查看次数

需要一个快速的C#教程(短期)非网络程序员

我在一家大公司的研究部门工作,我们使用.Net平台来构建我们的原型(这意味着如果原型"有用",产品团队总会重现我们的工作.).

我们还为我们的项目聘请实习生.一些实习生主要做研究,因此编码较少.但无论如何,实习生需要在C#或F#中进行一些编码,如果可以的话.他们中的大多数人之前没有任何C#经验.他们是高年级本科生或毕业生,通常知道一些Java和C++.但他们通常没有接受任何正式的行业质量编程培训.

困难的问题是快速教他们C#/.Net,因为他们应该在3或6个月的实习期间专注于他们的研究问题.此外,他们确实需要了解一些优秀的C#练习,否则实习期间的代码库在实习后无法重复使用.

我学习C#的方式与其他学习方法不同(我首先学习了F#,然后通过C#有效Java 从头到尾阅读CLR.)所以我想咨询经验丰富的C#用户建议短期(比如,2或3天)C#教程.非常感谢!

.net c#

24
推荐指数
2
解决办法
1万
查看次数

理解F#异步编程

我有点了解F#中异步编程的语法.例如

let downloadUrl(url:string) = async { 
  let req = HttpWebRequest.Create(url)
  // Run operation asynchronously
  let! resp = req.AsyncGetResponse()
  let stream = resp.GetResponseStream()
  // Dispose 'StreamReader' when completed
  use reader = new StreamReader(stream)
  // Run asynchronously and then return the result
  return! reader.AsyncReadToEnd() }
Run Code Online (Sandbox Code Playgroud)

在F#专家书(和许多其他来源),他们说喜欢

让!var = expr只是表示"执行异步操作expr并在操作完成时将结果绑定到var.然后继续执行其余的计算主体"

我也知道在执行异步操作时会创建一个新线程.我最初的理解是异步操作后有两个并行线程,一个执行I/O,另一个继续同时执行异步主体.

但在这个例子中,我很困惑

  let! resp = req.AsyncGetResponse()
  let stream = resp.GetResponseStream()
Run Code Online (Sandbox Code Playgroud)

如果resp尚未启动并且异步体中的线程想要发生GetResponseStream什么?这可能是错误吗?

也许我原来的理解是错误的.F#专家书中引用的句子实际上意味着"创建一个新线程,挂起当前线程,当新线程完成时,唤醒正文线程并继续",但在这种情况下我看不到我们可以保存随时.

在最初的理解中,当一个异步块中有多个独立的 IO操作时,可以节省时间,这样它们可以在不相互干预的情况下同时完成.但是在这里,如果我没有得到回复,我就无法创建流; 只有我有流,我可以开始阅读流.获得的时间在哪里?

f# asynchronous

22
推荐指数
2
解决办法
3430
查看次数

F#中Scala"case class"的等价物

我正在寻找Scala中可用的F#"案例类"中的等价物.

如果您希望使用方法和字段创建自定义类,并且仍然能够将它们与模式匹配一​​起使用,则案例类非常有用,如本文 Scala网站所述.

有谁知道F#中是否存在相同的内容?

f# functional-programming scala

21
推荐指数
2
解决办法
1728
查看次数

F#中的列表理解

我想在F#中做一些列表理解.我找到了这个.

let evens n =
    { for x in 1 .. n when x % 2 = 0 -> x }
print_any (evens 10)

let squarePoints n =
    { for x in 1 .. n
      for y in 1 .. n  -> x,y }
print_any (squarePoints 3)
Run Code Online (Sandbox Code Playgroud)

第一个仍然正常,但第二个已经过时了.最新的(1.9.7.8)F#编译器不支持这种风格.

经过一番搜索,我发现这是有效的

let vec1 = [1;2;3]
let vec2 = [4;5;6]
let products = [for x in vec1 do for y in vec2 do yield x*y]
Run Code Online (Sandbox Code Playgroud)

有人能指出为什么语法改变了?谢谢.

f# functional-programming list-comprehension list

19
推荐指数
1
解决办法
1万
查看次数

C语言中的软件设计实践

对于OOP语言,有很多书描述了如何设计软件,而设计模式主要用于OOP语言.

我想知道是否有任何书籍/好文章教授如何在一个大项目中使用C,比如当这个函数仅在一个文件中使用时,使用静态函数是一个好习惯.

c

19
推荐指数
4
解决办法
7063
查看次数

.NET在数值计算中的速度

根据我的经验,.NET比本机代码慢2到3倍.(我实施了L-BFGS进行多变量优化).

我已经在stackoverflow上跟踪广告到 http://www.centerspace.net/products/

速度真的很惊人,速度接近原生代码.他们怎么能这样做?他们说:

问:NMath是"纯粹的".NET吗?

答:答案在某种程度上取决于您对"纯.NET"的定义.NMath是用C#编写的,加上一个小的Managed C++层.但是,为了更好地执行基本线性代数运算,NMath确实依赖于本机Intel Math Kernel Library(包含在NMath中).但是没有COM组件,没有DLL - 只是.NET程序集.此外,在托管C++层中分配并由本机代码使用的所有内存都从托管堆中分配.

有人可以向我解释一下吗?

.net c# managed-c++ managed-code nmath

18
推荐指数
4
解决办法
6317
查看次数