相关疑难解决方法(0)

成为更好的F#程序员的途径

我想听听那些已经熟练掌握F#(以及一般的函数式编程)的人们,从现在开始我应该成为一名更好/专业的F#程序员?

我已经了解了很多F#语法,并且拥有多年的C++经验.我的目标是,作为工程师和数学家,设计更好的科学库(线性代数包,偏微分求解器等).

f# functional-programming

13
推荐指数
3
解决办法
1819
查看次数

单声道下的堆栈大小

我编写了一个很小的递归F#代码来查看我可以在.NET/Mono下的堆栈中放入多少级别的递归.它只是在精确的2次幂时打印递归深度,所以我发现最大深度在2的范围内.

我在一个具有定义的堆栈空间量的线程中启动代码System.Threading.Thread (ThreadStart, int).在.Net下,每个递归级别似乎需要大约100个字节,而我可以在2G堆栈上获得大约1600万个级别.Mono下的内存使用情况大致相似,但是我只能获得大约3万个级别.增加传递给Thread过去的堆栈大小值600000不会增加递归深度.

ulimit 报告堆栈大小限制为1G.

一个明显的解释是Mono不会服从第二个论点,Thread如果它太大了.有没有人知道如何说服Mono分配一个大堆栈?

代码是微不足道的,但它只是在某些人关心的情况下:

let rec f i =
    if popcount i = 1 then // population count is one on exact powers of 2
        printf "Got up to %d\n" i
        stdout.Flush ()
    if i = 1000000000 then 0 else 1 + f (i+1)
Run Code Online (Sandbox Code Playgroud)

.net mono recursion f#

10
推荐指数
1
解决办法
2095
查看次数

f#stackoverflow项目euler#4

我正在研究Project Euler的问题四,并且遇到了stackoverflow异常.我不是在寻求解决问题的帮助,我只是想解释为什么我得到一个stackoverflow异常.这通常是因为无限递归,但我不相信这次就是这种情况(如果我只是盲目而且现在没有看到它请告诉我).

这是代码:

let Euler4 =

let reverse sum =
    let rec loop (n,x) =
        if n = 0
        then
            x
        else
            loop (n/10,(x*10) + (n%10))

    loop (sum, 0);

let isPalindrome arg = (arg = (reverse arg));

let findPalindromes (startx,starty) =
    let rec loop (x,y) acc =
        let result = if isPalindrome (x * y) then ((x,y) :: acc) else acc;
        let next = match (x,y) with
            | (x,y) when y = 100 -> (x-1,starty)
            | …
Run Code Online (Sandbox Code Playgroud)

f#

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

F#中的尾递归:使用Quicksort进行反演

嗨我在理解尾递归方面有些困难.我知道避免无限循环以及内存使用非常重要.我在"F#中的专家"中看到了一些关于像Fibonacci这样的简单函数的例子,但是当我的结果不仅仅是一个数字时,我认为我没有看过代码.

那么累加器会是什么?我不确定...

这是我写的一个递归函数.它使用快速排序算法计算数组中的反转次数.[它取自斯坦福大学的Coursera MOOC Algo I的练习]

如果有人能解释如何使尾部递归,我将不胜感激.[另外,我已经从命令式代码翻译了那段代码,因为我之前在R中写过,所以风格根本不起作用......]

另一个问题:语法是否正确,A是一个(可变)数组,我let A = ....到处都写过?为A <- ....更好地/一样的吗?

open System.IO
open System


let X = [|57; 97; 17; 31; 54; 98; 87; 27; 89; 81; 18; 70; 3; 34; 63; 100; 46; 30; 99;
    10; 33; 65; 96; 38; 48; 80; 95; 6; 16; 19; 56; 61; 1; 47; 12; 73; 49; 41;
    37; 40; 59; 67; 93; 26; 75; 44; 58; 66; 8; 55; 94; 74; 83; 7; 15; 86; …
Run Code Online (Sandbox Code Playgroud)

recursion f# tail-recursion mutable quicksort

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