我想将以下代码转换为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)
但没有成功.我该怎么办?
例如,我有一个具有这种结构的树
let tr = Node(1,[Node(2,[Leaf(5)]);Node(3,[Leaf(6);Leaf(7)]);Leaf(4)])
Run Code Online (Sandbox Code Playgroud)
如何获得最小深度的叶子?
我无法理解.如何找到最常用的名称,例如
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#中定义一个秒表:
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#都会调用构造函数吗?如果是这样,我如何绕过这个广告达到预期的效果?这是功能和命令式编程的混乱混合.
在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)
摘要
为了后人,我将列出最有效的性能变化.
它仍然没有解释我的原始问题.但现在它可以忽略不计,很难说服自己花更多的时间在上面.我感谢大家的投入.谢谢!
我希望我能做到:
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) 我正在寻找一个只读通用集合库,它是System.Collections.Generic;与.NET v3.5兼容的公共集合的.NET版本的镜像(或者更确切地说是实现或扩展).
我猜想F#可能有一些只读集合(但我不确定它们是否实现了System.Collections.Generic中的接口).除此之外,我宁愿不在服务器上安装F#.我想我可以简单地部署F#dll(s),如果这是可行的,我怀疑它是.
是否有一个只读通用集合类库,它们实现System.Collections.Generic中的接口并提供相同的性能(或更好)特性?例如,随机访问阵列支持IList的实现(仅限只读).
这是我正在研究的例子:
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来比较每个人的测试,并确定他们得到了多少答案.任何帮助,将不胜感激.
我想解析一个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>标签之间的所有内容.
在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)
有任何想法吗?谢谢.