小编Sna*_*ark的帖子

F#特别报价?(##)

我刚跑过 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 ...

和谷歌(#呃呃......好吧,不多

这有什么方向吗?

f# quotations

12
推荐指数
1
解决办法
676
查看次数

带有函数闭包规则的perl foreach循环

以下代码

#!/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")

perl foreach closures

8
推荐指数
2
解决办法
479
查看次数

F#与C#性能签名与示例代码

关于这个话题已经有很多讨论,但我都是关于鞭打死马,特别是当我发现他们可能还在呼吸时.

我正在研究解析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)

c# performance f# tail-recursion

7
推荐指数
2
解决办法
2532
查看次数

F#中的复杂延续

我能找到的所有延续教程都是固定长度的延续(即数据结构在遍历时具有已知数量的项目)

我正在实施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)

continuations f# depth-first-search

7
推荐指数
1
解决办法
550
查看次数

F#中的不可变Trie结构

我正在使用aho-corasick算法来尝试使用F#更好一点,我遇到了Trie实现的问题,它们都是可变的或者不能进行尾调用优化.

我可以看到的基本问题是,不可变数据结构必须"自下而上"构建,因为你不能改变他们所指向的内容,所以你的选择要么让它们变得可变,要么在你去的时候找出节点(即在施工中递归).

有没有办法在构造上使用尾调用优化来创建一个不可变的trie数据结构?(而不是通过复制来降低效率).

f# immutability trie tail-call

6
推荐指数
1
解决办法
559
查看次数

F#中全局变量的样式指南

对于我正在研究的项目,我需要一个全局变量(技术上我没有,我可以构建它然后将它传递给每个函数调用,让每个函数调用都知道它,但这看起来像hacky,不太可读和更多的工作.)

全局变量是游戏的查找表(最后阶段,开始书和转置/缓存).

事实上,一些代码可能会失去一些不负责任的行为,实际上就是简单(加速),是的,我知道全局可变状态很糟糕,在这种情况下它确实值得(10x +性能提升)

所以这里的问题是"在一个带有组合器的静态类中构建单例或使用静态值"

它们实际上完全相同,但我很好奇人们之前在这类问题上所做的事情

或者,如果我将这个东西传递给每个人(或者至少是对它的引用),那真的是最好的答案吗?

f# coding-style global-variables

6
推荐指数
2
解决办法
2116
查看次数

Pandas 聚合以与 nan 一起计数

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。

numpy pandas

6
推荐指数
1
解决办法
4565
查看次数

使用F#的Staticlink vs独立怪癖

在vs2010终极版中,如果将--standalone标志交给项目窗格中的f#编译器,它将不会将空C#项目与配置文件/资源​​文件链接

但是,如果您明确声明--staticlink:Config,它将链接程序集

这感觉就像一个错误......如果它是有意的,请问为什么会这样?

compiler-construction linker f#

5
推荐指数
1
解决办法
559
查看次数

置换生成器函数F#

我需要生成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# permutation

4
推荐指数
1
解决办法
586
查看次数

F#编译问题

关于F#编译器的几个问题

1) -noframework做什么?我用它编译但我仍然需要.Net 4.0(我想也许它允许一个端口到早期版本?)它是否删除了F#dependancy?

2) F#--optimize +启用了哪些优化?他们都是?如果是这样,他们都是什么?

3) --tailcall有哪些优点/缺点?我知道x64过去常常忽略.tailcall,我很好奇是否有其他问题或者这些问题是否仍然存在.

4)什么是--crossoptimize,它做了什么?

5) 实际上有一个快速的子语言还是那个真的老了?

compiler-construction f# compiler-optimization

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

F#性能错误?

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)

performance f#

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

F#交互式会话持久性和其他此类用户问题

有没有办法持久化我的F#会话或将其序列化为文件?即所以我可以把它交给朋友说"跑这个",他们会在同一个地方吗?我知道有这种能力,但我找不到任何方法这样做.

另一种选择是日志文件或类似的东西,但理想情况下它会剥离输出并只给我编写的代码.

关于用户问题,是否有F#的配置文件,所以我可以添加一些"always includes"或更改默认值?

f# fsi

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