这个问题始于
SML.NET可以做仿函数并使用Microsoft .NET.
*请参阅:SML.NET用户指南第4.8.2节类类型和仿函数?
由于Microsoft .NET的一些限制,我一直看到F#无法做真正的仿函数.
*ML仿函数可以用.NET完全编码(C#/ F#)吗?
*算子的任何解决方法?
那么如果SML.NET可以在.NET上运行仿函数那么为什么F#不能呢?SML.NET做了什么,F#不能做什么?
我越了解来自类别理论的仿函数,我越看到它们的美丽,并希望在F#中拥有它们.
编辑
在思考功能性思维模式时,假设函数应该是纯粹的,那么可以断定任何没有参数的函数基本上只是一个值.
然而,reallity阻碍了,并且对于不同的输入,我可能不需要某个函数,并且如果该函数在计算上是昂贵的,那么如果不需要它我不想评估它.
我找到了一个解决方法,使用let func _ = ...func 1或其他任何东西来调用它,但这对读者来说非常非惯用且令人困惑.
这归结为一个问题:在F#中,是否有一种正确的方法来声明一个零参数的函数,而没有在声明中进行评估?
F#中的集合初始化程序语法是什么?在C#中,您可以编写如下内容:
new Dictionary<string, int>() {
{"One", 1},
{"two", 2}}
Run Code Online (Sandbox Code Playgroud)
我如何在F#中做同样的事情?我想我可以使用自己的语法,但似乎应该有一个内置或标准的语法.
我是F#的新手,正在阅读有关尾递归函数的内容,希望有人可以给我两个不同的函数foo实现 - 一个是尾递归的,另一个不是我可以更好地理解这个原理.
这是在与朋友交谈时提出的,我想我会问这里,因为这是一个有趣的问题,并希望看到其他人的解决方案.
任务是编写一个函数Brackets(int n),它打印1 ... n 中格式正确的括号的所有组合.对于Brackets(3),输出将是
()
(()) ()()
((())) (()()) (())() ()(()) ()()()
Run Code Online (Sandbox Code Playgroud) 我正在测试.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)
谁知道为什么?
我正在使用Real World Haskell的I/O章节.Monads在本书中未讨论另外7章.也就是说,我对I/O的理解充其量是不完整的.
现在我正在尝试理解mapM功能.据我所知,函数"执行"列表中的每个元素必须是"动作"(IO monad).
没有意义的是这个例子.为什么mapM返回的结果与映射相同的参数不同?
Prelude> map (\x -> [x]) [0, 1, 2] [[0],[1],[2]] Prelude> mapM (\x -> [x]) [0, 1, 2] [[0,1,2]]
我已经获得了大量格式不佳的单片R代码,并且有很多功能,我想知道哪些函数调用了什么函数.
我以为我可以使用roxygen的@callGraph东西,但是a)代码需要在一个包中,这将是这个代码的头疼,并且b)当我在一个简单的上运行它时它似乎不起作用我的包裹.我看到其中一位Roxygen作者发布了一条帖子,称由于Rgraphviz依赖关系而禁用了调用图生成,但代码就在那里.无论如何.
任何人都有更好的方法来快速计算foo调用bar,baz和qux,而qux调用quux?
编辑:基于R的分析系统的解决方案很棒,假设您可以实际运行代码...文件中的一半东西不会运行,我不知道它做了什么...静态分析太多了我想是希望的.
编辑2:Roxygen的调用图东西似乎做了一个静态分析,基于函数表达式的递归下降和检查is.callable.能够在任何功能上运行它会很可爱......明天我可能会玩这个...
我有这个"学习代码",我为f#中的morris seq编写,它遇到堆栈溢出,我不知道如何避免."morris"返回无限序列的"看见和说出"序列(即{{1},{1,1},{2,1},{1,2,1,1},{1,1,1 ,2,2,1},{3,1,2,2,1,1},...}).
let printList l =
Seq.iter (fun n -> printf "%i" n) l
printfn ""
let rec morris s =
let next str = seq {
let cnt = ref 1 // Stack overflow is below when enumerating
for cur in [|0|] |> Seq.append str |> Seq.windowed 2 do
if cur.[0] <> cur.[1] then
yield!( [!cnt ; cur.[0]] )
cnt := 0
incr cnt
}
seq {
yield s
yield! morris (next s) // tail recursion, no stack …Run Code Online (Sandbox Code Playgroud) 我是OCaml新手.我喜欢OCaml的速度,但我并不完全了解它的设计.例如,我希望+运算符是多态的,以支持整数,浮点等.
我们为什么需要+.?