标签: f#

学习F#

对于那些学过F#的人 - 你推荐什么作为学习语言的最佳资源 - 书籍,网站等.我目前的背景是在c#和asp.net. - 非常感谢.

f#

42
推荐指数
4
解决办法
5703
查看次数

在F#中的cons运算符(::)

F#中的::运算符始终将元素添加到列表中.是否有运营商附加到列表中?我猜是使用@运算符

[1; 2; 3] @ [4]

效率低于附加一个元素.

f# functional-programming

42
推荐指数
4
解决办法
2万
查看次数

纯函数式编程上下文中的面向对象编程?

在函数式编程(FP)上下文中使用面向对象编程(OOP)有什么好处吗?

我一直在使用F#已经有一段时间了,我注意到我的函数越多,无状态,我就越不需要将它们作为对象的方法.特别是,依靠类型推断使它们在尽可能多的情况下可用是有利的.

这并不排除需要某种形式的名称空间,这与OOP正交.也不鼓励使用数据结构.实际上,FP语言的实际使用在很大程度上依赖于数据结构.如果你看一下F Sharp Programming/Advanced Data Structures中实现的F#堆栈,你会发现它不是面向对象的.

在我看来,OOP与使用对象状态的方法主要是为了改变对象有很大的联系.在纯FP环境中,不需要也不需要.

一个实际的原因可能是能够与OOP代码交互,就像F#与.NET一样.除此之外,有什么理由吗?Haskell世界的经验是什么,编程是更纯粹的FP?

我将非常感谢有关该问题的论文或反事实现实世界的例子.

oop f# haskell functional-programming scala

42
推荐指数
3
解决办法
3788
查看次数

F#计量单位能否在OCaml中实施?

F#具有度量单位能力(本研究报告中有更多细节).

[<Measure>] type unit-name [ = measure ]
Run Code Online (Sandbox Code Playgroud)

这允许定义单位,例如:

type [<Measure>] USD
type [<Measure>] EUR
Run Code Online (Sandbox Code Playgroud)

代码写成:

let dollars = 25.0<USD>
let euros = 25.0<EUR>

// Results in an error as the units differ
if dollars > euros then printfn "Greater!"
Run Code Online (Sandbox Code Playgroud)

它还处理转换(我猜这意味着Measure定义了一些函数,让Measures成倍增加,分割和取幂):

// Mass, grams.
[<Measure>] type g
// Mass, kilograms.
[<Measure>] type kg

let gramsPerKilogram : float<g kg^-1> = 1000.0<g/kg>

let convertGramsToKilograms (x : float<g>) = x / gramsPerKilogram
Run Code Online (Sandbox Code Playgroud)

这个功能可以在OCaml中实现吗?有人建议我看一下幻像类型,但它们看起来并不像单位那样构成.

(披露:几个月前我问过关于Haskell的这个问题,得到了一个有趣的讨论,但没有超出'可能不是'的确定答案).

f# ocaml units-of-measurement

42
推荐指数
2
解决办法
1162
查看次数

2d游戏物理资源

我正在寻找一些很好的参考资料来学习如何在游戏中建模2d物理.我不是在找图书馆为我做这件事 - 我想思考和学习,而不是盲目地利用别人的工作.

我已经做了很多谷歌搜索,虽然我已经在GameDev上找到了一些教程等,但是我发现他们的教程难以理解,因为它们要么写得不好,要么假设我不懂数学水平.但还是拥有.

具体而言 - 我正在寻找如何模拟自上而下的2D游戏,有点像坦克战斗游戏 - 我想准确地模拟(除其他外)加速度和速度,'组件的热量积累'之间的碰撞模型和等级界限,以及导弹型武器.

网站,推荐书籍,博客,代码示例 - 如果有助于理解,欢迎所有人.我正在考虑使用C#和F#来构建我的游戏,所以这两种语言中的代码示例都会很棒 - 但是不要让语言阻止你发布一个好的链接.=)

编辑:我不是说我不理解数学 - 更多的情况是我不知道我需要知道什么才能理解所涉及的系统,并且不知道如何找到资源会以一种可以理解的方式教我.

c# f# physics 2d

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

dotNet中是否存在DirectoryInfo.GetFiles/Directory.GetDirectories的异步版本?

dotNet中是否存在DirectoryInfo.GetFiles/Directory.GetDirectories的异步版本?我想在F#异步块中使用它们,并且拥有一个可以使用AsyncCallbacks调用的版本会很好.

问题是我试图吮吸一堆目录,可能是在慢速网络连接上的SMB挂载上,我不希望一堆线程池线程在等待网络读取时可能正在做其他工作.

.net f# asynchronous directoryinfo async-workflow

40
推荐指数
4
解决办法
2万
查看次数

Scala与F#问题:他们如何统一OO和FP范式?

Scala和F#采用的方法在统一OO和FP范例方面有哪些主要区别?

编辑

每种方法的相对优点和缺点是什么?如果,尽管支持子类型,F#可以推断函数参数的类型然后为什么不能Scala?

comparison paradigms f# functional-programming scala

40
推荐指数
6
解决办法
8888
查看次数

F#string.Format

我正在写我的第一个F#库

我试图使用string.Format它并抱怨没有这样的功能.

它不可用或我做错了什么?

f#

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

FSharp运行我的算法比Python慢

几年前,我通过动态编程解决了一个问题:

https://www.thanassis.space/fillupDVD.html

解决方案是用Python编写的.

作为拓展视野的一部分,我最近开始学习OCaml/F#.有什么更好的方法来测试水域,而不是直接将我用Python编写的命令式代码移植到F# - 并从那里开始,逐步向功能性编程解决方案迈进.

第一个直接端口的结果令人不安:

在Python下:

  bash$ time python fitToSize.py
  ....
  real    0m1.482s
  user    0m1.413s
  sys     0m0.067s
Run Code Online (Sandbox Code Playgroud)

在FSharp下:

  bash$ time mono ./fitToSize.exe
  ....
  real    0m2.235s
  user    0m2.427s
  sys     0m0.063s
Run Code Online (Sandbox Code Playgroud)

(如果您注意到上面的"mono":我在Windows下测试过,使用Visual Studio - 速度相同).

至少可以说,我......感到困惑.Python比F#运行代码更快?使用.NET运行时编译的二进制文件运行SLOWER而不是Python的解释代码?!?!

我知道VM的启动成本(在这种情况下为单声道)以及JIT如何改进Python等语言的东西,但仍然......我期望加速,而不是减速!

我也做错了吗?

我在这里上传了代码:

https://www.thanassis.space/fsharp.slower.than.python.tar.gz

请注意,F#代码或多或少是Python代码的直接逐行转换.

PS当然还有其他的好处,例如F#提供的静态类型安全性 - 但如果在F#下强制算法的结果速度更差......至少可以说,我很失望.

编辑:根据评论中的要求直接访问:

Python代码:https: //gist.github.com/950697

FSharp代码:https: //gist.github.com/950699

python algorithm performance f# dynamic-programming

40
推荐指数
3
解决办法
9301
查看次数

功能相当于装饰模式?

什么是函数式编程相当于装饰器设计模式?

例如,您如何在功能样式中编写此特定示例

f# haskell design-patterns functional-programming clojure

40
推荐指数
5
解决办法
5629
查看次数