标签: f#

如何基于现有的C#片段在F#中创建可观察的函数?

我想将以下代码转换为F#:

static void Main(string[] args)
{
    var y = Observable.Create<int>(x =>
        {
            x.OnNext(5);
            return (() => { });
        });

    y.Subscribe(x => Console.WriteLine(x));
}
Run Code Online (Sandbox Code Playgroud)

尝试了以下内容:

let ob = Observable.Create<int>(fun x -> 
                                    x.OnNext(5)
                                    fun unit -> unit)  
Run Code Online (Sandbox Code Playgroud)

但没有成功.我该怎么办?

c# f# reactive-programming c#-to-f#

0
推荐指数
2
解决办法
578
查看次数

如何获得最小深度的叶子?

例如,我有一个具有这种结构的树

let tr = Node(1,[Node(2,[Leaf(5)]);Node(3,[Leaf(6);Leaf(7)]);Leaf(4)])
Run Code Online (Sandbox Code Playgroud)

如何获得最小深度的叶子?

f#

0
推荐指数
1
解决办法
173
查看次数

检索最常用的名称

我无法理解.如何找到最常用的名称,例如

type person = {name:string; surname:string}

let persons=[{name:"Jack";surname:"YYY"};
             {name:"Joe";surname:"XYX"};
             {name:"Jack";surname:"XXY"}]
Run Code Online (Sandbox Code Playgroud)

f#

0
推荐指数
1
解决办法
118
查看次数

让F#中的绑定和构造函数

我在F#中定义一个秒表:

open System.Diagnostics

let UptimeStopwatch = Stopwatch.StartNew()
Run Code Online (Sandbox Code Playgroud)

我每3秒打印一次

printfn "%A" UptimeStopwatch.Elapsed
Run Code Online (Sandbox Code Playgroud)

每当我得到"00:00:00.0003195"或类似的小东西.每次我引用UptimeStopwatch时F#都会调用构造函数吗?如果是这样,我如何绕过这个广告达到预期的效果?这是功能和命令式编程的混乱混合.

f# functional-programming

0
推荐指数
1
解决办法
139
查看次数

是什么让这个F#在VS2012中变得如此之慢?

在Visual Studio 2012中,为什么此代码在交互模式下如此快速地执行,并且在作为控制台应用程序运行时如此缓慢?我有一台快速计算机,但在运行时功能完成之前我可以数到4,在交互式工作室窗口中甚至不能达到1.

令我烦恼的另一部分是,当我测试其他人的Project Euler#4的F#代码时,它们都运行良好.所以它让我相信这段代码有一些不是最优的.(它也很整洁干净>:P)

let reverse(digits:string) = 
     digits.ToCharArray() |> Array.rev |> System.String.Concat    

let isPalindrome(number:int) =        
    let text = number.ToString()
    if text.Length % 2 = 0 then                        
        text = reverse(text)        
    else
        false

let palindromes(floor:int, ceiling:int) =     
    seq {
        for i1 = floor to ceiling do
            for i2 = floor to ceiling do
                let result = i1 * i2
                if isPalindrome result then
                    yield result 
    }

let run = 
    palindromes(100, 999)    
    |> Seq.max
Run Code Online (Sandbox Code Playgroud)

摘要

为了后人,我将列出最有效的性能变化.

  • 删除Concat并改为创建新字符串.
  • 保留最大的回文而不是收集所有回文
  • 用计算反向替换反向的字符串版本

它仍然没有解释我的原始问题.但现在它可以忽略不计,很难说服自己花更多的时间在上面.我感谢大家的投入.谢谢!

f# visual-studio

0
推荐指数
1
解决办法
478
查看次数

在这种情况下如何处理序列构造,因为我们没有断点也没有强大的Seq.choose版本?

我希望我能做到:

 let myFun param1 param2 = 
      .....
      if condition 1
          ....
          if condition 2
               yield ....

 let sequence = seq { for x in xs do
                            myFun 1 x
                            myFun 2 x
                    }
Run Code Online (Sandbox Code Playgroud)

但现在我只能这样做

 let myFun param = 
      .....
      .....
      if condition 1
          ....
          if condition 2
               Some....
          else None    // has to complete else
      else None

 let sequence = seq { for x in xs do
                        match myFun 1 x with
                        | Some x -> yield x
                        | None …
Run Code Online (Sandbox Code Playgroud)

f#

0
推荐指数
1
解决办法
127
查看次数

是否有一组C#数据只读通用集合/数据结构?

我正在寻找一个只读通用集合库,它是System.Collections.Generic;与.NET v3.5兼容的公共集合的.NET版本的镜像(或者更确切地说是实现或扩展).

我猜想F#可能有一些只读集合(但我不确定它们是否实现了System.Collections.Generic中的接口).除此之外,我宁愿不在服务器上安装F#.我想我可以简单地部署F#dll(s),如果这是可行的,我怀疑它是.

是否有一个只读通用集合类库,它们实现System.Collections.Generic中的接口并提供相同的性能(或更好)特性?例如,随机访问阵列支持IList的实现(仅限只读).

c# collections f#

0
推荐指数
1
解决办法
670
查看次数

比较f#中两个单独列表中的项目

这是我正在研究的例子:

    let test =
  [("Andy", ["d"; "a"; "d"; "c"; "b"; "d"; "c"; "a"; "a"; "c"; "a"; "d"; "a"; "a"; "d"; "e"]);
   ("Harry", ["b"; "d"; "c"; "b"; "c"; "b"; "a"; "a"; "d"; "b"; "d"; "d"; "a"; "c"; "b"; "e"]);

let answers = ["b"; "a"; "a"; "c"; "d"; "d"; "c"; "a"; "a"; "d"; "a"; "d"; "a"; "a"; "d"; "e"]);
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用list.map来比较每个人的测试,并确定他们得到了多少答案.任何帮助,将不胜感激.

f# compare list

0
推荐指数
1
解决办法
1478
查看次数

f#按标签分割html

我想解析一个HTML文档,并将每个段落作为单独的条目打印到日志文件中.到目前为止,我有:

let parseTextFile (path) =
        let fileText = File.ReadAllText(path)
        fileText.Split('<p>') |> Seq.iter (fun m -> logEmail(m))
Run Code Online (Sandbox Code Playgroud)

但不幸的是对我来说string.Split没有做我想要的东西,似乎存在用单个字符分隔符分割字符串.如何使用多于一个字符的东西来分割文件,除了<p>之外还有更多的东西可能会很好,因为我只会在段落末尾有一个</ p>.使用正则表达式或某种复杂的匹配器,我可以更具体地选择<p>标签之间的所有内容.

html string f# parsing split

0
推荐指数
1
解决办法
284
查看次数

如何在F#中封装"所有参数"的概念?

在F#中,我需要做这样的事情:

let price k s t r v =
  let d1 = d1 k s t r v
... and so on
Run Code Online (Sandbox Code Playgroud)

当他们被传递到函数中时,我已经厌倦了列出所有参数.除了将参数转换为参数对象(我不能做的事情)之外,还有什么方法可以对参数进行分组吗?我在想类似的东西

let price (k s t r v as foo) =
  let d1 = d1 foo
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢.

f#

0
推荐指数
1
解决办法
98
查看次数