我刚跑过 http://frankniemeyer.blogspot.com/2010/04/minimalistic-native-64-bit-array.html 其中包含该行
(# "sizeof !0" type('T) : nativeint #)
Run Code Online (Sandbox Code Playgroud)
我相信技术短语是"什么事?" 我从未在我的(约8个月)的F#编程中遇到过类似于......的东西......
FSI告诉我一些关于弃用的构造,仅用于F#libs ...
和谷歌(#呃呃......好吧,不多
这有什么方向吗?
以下代码
#!/usr/bin/env perl
use strict;
use warnings;
my @foo = (0,1,2,3,4);
foreach my $i (@foo) {
sub printer {
my $blah = shift @_;
print "$blah-$i\n";
}
printer("test");
}
Run Code Online (Sandbox Code Playgroud)
没有做我所期望的.
究竟发生了什么?(我希望它打印出来"test-0 \ntest-1 \ntest-2 \ntest-3 \ntest-4 \n")
关于这个话题已经有很多讨论,但我都是关于鞭打死马,特别是当我发现他们可能还在呼吸时.
我正在研究解析CSV的异常和异国情调的文件格式,为了好玩,我决定用我知道的2 .net语言C#和F#来表征性能.
结果......令人不安.F#大幅提升了2倍或更多(实际上我认为它更像是.5n,但是由于我正在测试硬件IO,因此获得真正的基准测试很难).
像读取CSV这样常见的性能特征让我感到惊讶(请注意,系数意味着C#在非常小的文件上获胜.我正在进行的测试越多,感觉C#的表现越差,这既令人惊讶又令人关注,因为它可能意味着我做错了).
一些笔记:Core 2 duo笔记本电脑,主轴磁盘80演出,3演出ddr 800内存,Windows 7 64位溢价,.Net 4,没有打开电源选项.
第一次运行后30,000行5宽1短语10个字符或更少给我3个支持尾调用递归(它似乎缓存文件)
对于尾部调用递归,300,000(重复相同的数据)是2的因子,F#的可变实现略微胜出,但性能签名表明我正在击中磁盘而不是ram-disking整个文件,这会导致半随机性能尖峰.
F#代码
//Module used to import data from an arbitrary CSV source
module CSVImport
open System.IO
//imports the data froma path into a list of strings and an associated value
let ImportData (path:string) : List<string []> =
//recursively rips through the file grabbing a line and adding it to the
let rec readline (reader:StreamReader) (lines:List<string []>) : List<string []> =
let line = reader.ReadLine()
match line with …
Run Code Online (Sandbox Code Playgroud) 我能找到的所有延续教程都是固定长度的延续(即数据结构在遍历时具有已知数量的项目)
我正在实施DepthFirstSearch Negamax(http://en.wikipedia.org/wiki/Negamax),当代码工作时,我想用continuation重写代码
我的代码如下
let naiveDFS driver depth game side =
List.map (fun x ->
//- negamax depth-1 childnode opposite side
(x, -(snd (driver (depth-1) (update game x) -side))))
(game.AvailableMoves.Force())
|> List.maxBy snd
let onPlay game = match game.Turn with
| Black -> -1
| White -> 1
///naive depth first search using depth limiter
let DepthFirstSearch (depth:int) (eval:Evaluator<_>) (game:GameState) : (Move * Score) =
let myTurn = onPlay game
let rec searcher depth game side =
match depth with …
Run Code Online (Sandbox Code Playgroud) 我正在使用aho-corasick算法来尝试使用F#更好一点,我遇到了Trie实现的问题,它们都是可变的或者不能进行尾调用优化.
我可以看到的基本问题是,不可变数据结构必须"自下而上"构建,因为你不能改变他们所指向的内容,所以你的选择要么让它们变得可变,要么在你去的时候找出节点(即在施工中递归).
有没有办法在构造上使用尾调用优化来创建一个不可变的trie数据结构?(而不是通过复制来降低效率).
对于我正在研究的项目,我需要一个全局变量(技术上我没有,我可以构建它然后将它传递给每个函数调用,让每个函数调用都知道它,但这看起来像hacky,不太可读和更多的工作.)
全局变量是游戏的查找表(最后阶段,开始书和转置/缓存).
事实上,一些代码可能会失去一些不负责任的行为,实际上就是简单(加速),是的,我知道全局可变状态很糟糕,在这种情况下它确实值得(10x +性能提升)
所以这里的问题是"在一个带有组合器的静态类中构建单例或使用静态值"
它们实际上完全相同,但我很好奇人们之前在这类问题上所做的事情
或者,如果我将这个东西传递给每个人(或者至少是对它的引用),那真的是最好的答案吗?
pandas 计数聚合忽略了 nan 的计数。我需要一个包含它们的计数。Numpy 具有某些但不是所有 nan 修改聚合的聚合,我是否必须使用自定义聚合,或者是否有一种我找不到的方法可以做到这一点?
这是针对 groupby 的,我想要正常的 NaN 功能来表示平均值,但对于计数来说很奇怪。在代码中
In [1]: import numpy
In [2]: import pandas as pd
In [3]: df = pd.DataFrame([[0,float('nan')],[0,float('nan')],[0,float('nan')]])
In [4]: df.groupby(0).agg(['count', 'mean'])
Out[4]:
1
count mean
0
0 0 NaN
Run Code Online (Sandbox Code Playgroud)
我希望输出为 3 Nan 而不是 0 NaN。
在vs2010终极版中,如果将--standalone标志交给项目窗格中的f#编译器,它将不会将空C#项目与配置文件/资源文件链接
但是,如果您明确声明--staticlink:Config,它将链接程序集
这感觉就像一个错误......如果它是有意的,请问为什么会这样?
我需要生成1..nx 1..n的所有不同排列的列表,其中第一个值不等于第二个(即生成3 - > [(3,2)::(3,1)::( 2,3)::( 2,1)::(1,3)::(1,2)]
确切的情况是你有一个对象池(卡),每个玩家都有一个.如果一名牌手被发牌,那么其他牌手就不会被发牌(暂时忽略套牌,如果必须的话,我会让1-52牌照到实际的牌上)
我提出了以下看起来很混乱的内容
let GenerateTuples (numcards: int) =
let rec cellmaker (cardsleft: int) (cardval:int) =
if cardval = cardsleft then (if cardval <= 0 then [] else cellmaker cardsleft (cardval-1) ) elif cardval <= 0 then [] else (cardsleft, cardval) :: cellmaker cardsleft (cardval-1)
let rec generatelists (cardsleft:int) =
cellmaker cardsleft numcards @ (if cardsleft > 1 then generatelists (cardsleft-1) else [])
generatelists numcards
Run Code Online (Sandbox Code Playgroud)
有更好的方法吗?
关于F#编译器的几个问题
1) -noframework做什么?我用它编译但我仍然需要.Net 4.0(我想也许它允许一个端口到早期版本?)它是否删除了F#dependancy?
2) F#--optimize +启用了哪些优化?他们都是?如果是这样,他们都是什么?
3) --tailcall有哪些优点/缺点?我知道x64过去常常忽略.tailcall,我很好奇是否有其他问题或者这些问题是否仍然存在.
4)什么是--crossoptimize,它做了什么?
let test1fun x = [for i in 1..x-> i]
let test2fun x y= [for i in 1..x
do for i in 1..y-> i]
let singlesearcher i =
let rec searcher j agg =
if j > i
then agg
else searcher (j+1) (i::agg)
searcher 1 []
let doublesearcher i j =
let rec searcher k l agg =
if k > i
then searcher 1 (l+1) agg
else if l > j
then agg
else searcher (k+1) l ((k,l)::agg)
searcher …
Run Code Online (Sandbox Code Playgroud) 有没有办法持久化我的F#会话或将其序列化为文件?即所以我可以把它交给朋友说"跑这个",他们会在同一个地方吗?我知道有这种能力,但我找不到任何方法这样做.
另一种选择是日志文件或类似的东西,但理想情况下它会剥离输出并只给我编写的代码.
关于用户问题,是否有F#的配置文件,所以我可以添加一些"always includes"或更改默认值?
f# ×10
performance ×2
c# ×1
closures ×1
coding-style ×1
foreach ×1
fsi ×1
immutability ×1
linker ×1
numpy ×1
pandas ×1
perl ×1
permutation ×1
quotations ×1
tail-call ×1
trie ×1