小编Guy*_*der的帖子

Haskell中的随机数生成器是线程安全的吗?

所有线程共享相同的"全局随机数生成器",还是每个线程都有自己的?

如果共享一个,我如何确保线程安全?在Real World Haskell"Monads"一章中描述的使用getStdGensetStdGen的方法看起来并不安全.

如果每个线程都有一个独立的发生器,那么快速连续启动的两个线程的发生器会有不同的种子吗?(例如,如果种子是以秒为单位的时间,它们将不会,但毫秒可能没​​问题.我不知道如何从Data.Time获得毫秒分辨率的时间.)

random multithreading haskell thread-safety

15
推荐指数
2
解决办法
882
查看次数

如何在F#中为T []定义类型扩展?

在C#中,我可以为类型为T的泛型数组定义一个扩展方法,如下所示:

public static T GetOrDefault<T>(this T[] arr, int n)
{
    if (arr.Length > n)
    {
        return arr[n];
    }

    return default(T);
}
Run Code Online (Sandbox Code Playgroud)

但对于我的生活,我无法弄清楚如何在F#中做同样的事情!我试过了type 'a array with,type array<'a> with并且type 'a[] with编译器对它们中的任何一个都不满意.

任何人都可以告诉我在F#中做到这一点的权利是什么?

当然,我可以通过掩盖阵列模块并为此轻松添加功能来实现这一点,但我真的想知道如何将其作为扩展方法!

c# arrays extension-methods f#

15
推荐指数
2
解决办法
968
查看次数

找到第n个加泰罗尼亚数字模型的最快(已知)算法是什么?

问题是要找到第n个加泰罗尼亚数模m,其中m不是素数,m = (10^14 + 7).以下是我尝试过的方法列表:(最大N = 10,000)

  1. 查找表的动态编程太慢了
  2. 使用加泰罗尼亚语公式ncr(2*n, n)/(n + 1),再次由于ncr函数不够快,不能加速使用取幂平方因为m不是素数.
  3. 硬编码预生成的表Catalans,但由于文件大小限制而失败.
  4. 递归关系C(i,k) = C(i-1,k-1) + C(i-1,k),这太慢了

所以我想知道还有其他更快的算法来找到我不知道的第n个加泰罗尼亚数字吗?

使用动态编程

void generate_catalan_numbers() {
    catalan[1] = 1;
    for (int i = 2; i <= MAX_NUMBERS; i++) {
        for (int j = 1; j <= i - 1; j++) {
            catalan[i] = (catalan[i] + ((catalan[j]) * …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm math catalan

15
推荐指数
2
解决办法
5025
查看次数

为什么循环表达式的简单限制为整数范围?

根据F#的规格(见§6.5.7),for循环简单的通过整数界(int又名int32又名System.Int32)的限制startstop,如

for i = start to stop do
    // do sth.
Run Code Online (Sandbox Code Playgroud)

我想知道为什么要求这种类型的for循环的迭代界限int32.为什么不允许uint32int64bigint

我知道序列迭代表达式(for ... in ...)可以迭代任意序列; 然而,这需要分配一个迭代器和调用MoveNext,Current什么不是,因此可能比普通循环效率低得多(增量计数器,比较,条件跳转).为避免这种情况,您将无法使用while和手动递增循环计数器......

奇怪的是,如果表达式包含在序列表达式中,F#确实允许非int32循环边界for,例如

seq { for i = 0I to 10I do
        printfn "%A" i }
Run Code Online (Sandbox Code Playgroud)

所以,我想问题是:是否有一个特殊的原因只允许int32循环?为什么这个限制不适用于表达式中包含的for循环seq

f# for-loop inline imperative-programming control-flow

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

带有gcAllowVeryLargeObjects的OutOfMemoryException

我正在使用BinarySerializer,它有一个非常大的(尽管不是很深)项目图.我有8GB的ram支持12Gig的交换,并且在序列化时我得到一个OutOfMemoryException,这是预期的(图表可能接近或超过2Gb).

然而,当我使用gcAllowVeryLargeObjects它并不是更好,我仍然得到相同的异常,我肯定在应该保留在内存中的东西(至少与交换).

有什么我可以做的来支持序列化这个/一种方法来获得相同的功能集,但可能会得到结果?

我的序列化代码没有什么特别之处:

    public static byte[] Serialize(this object o)
    {
        var ms = new MemoryStream();
        var bf = new BinaryFormatter();
        bf.Serialize(ms, o);
        ms.Position = 0;
        return ms.ToArray();
    }
Run Code Online (Sandbox Code Playgroud)

我正在序列化的对象包含自身包含数组等的项目数组,但完整的图形本身并不"大"(这是索引数据的结果,在源处,已经只有大约1GB的大小).

这不是由于GC碎片造成的(压缩大堆没有帮助).

.net c# out-of-memory .net-4.5 gcallowverylargeobjects

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

有没有办法限制Bazel使用的CPU核心数量?

有没有办法告诉Bazel什么时候可以使用多少CPU内核?

TL; DR

我在VMware Workstation上构建TensorFlow并且作为虚拟机我可以调整虚拟机的处理器和核心数量.

在构建TensorFlow的过程中,我发现只使用一个核心工作.当我给Workstation提供四个内核并构建TensorFlow时,它最终将系统停止到我必须重启的程度.

如果我等了几个小时(不管它一夜之间),它有时会返回以下错误:

gcc:内部编译器错误:已杀死(程序cc1plus)

虽然我可以使用虚拟机配置选项更改内核数量,但我更愿意这样做,而无需关闭并重新启动虚拟机.

cpu-cores bazel

14
推荐指数
2
解决办法
4188
查看次数

列表列表中是否存在元素?

我想查找列表列表中是否存在给定元素.如果元素存在于某处是第一个列表列表,我只会变为真.

有什么建议?

memberlist(X,[[X|T1]|T2]).
memberlist(X,[[H|T1]|T2]) :-
  memberlist(X,[T1|T2]).
Run Code Online (Sandbox Code Playgroud)

list prolog member

14
推荐指数
5
解决办法
1417
查看次数

难以思考FsCheck的属性

我已经设法让xUnit处理我的小样本组件.现在我想知道我是否也可以参加FsCheck.我的问题是,在为我的函数定义测试属性时,我很难过.

也许我只是没有一套好的样本函数,但是这些函数的测试属性是什么呢?

//transforms [1;2;3;4] into [(1,2);(3,4)]
pairs : 'a list -> ('a * 'a) list      //'

//splits list into list of lists when predicate returns 
//  true for adjacent elements
splitOn : ('a -> 'a -> bool) -> 'a list -> 'a list list

//returns true if snd is bigger
sndBigger : ('a * 'a) -> bool (requires comparison)
Run Code Online (Sandbox Code Playgroud)

f# unit-testing fscheck property-based-testing

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

F#中的加法类型(+)

我刚刚了解到OCAML必须有一个.用于执行浮点运算的后缀.一个例子是3. +. 4.equals 7.(float).但是,F#以相同的方式处理浮点和整数运算,因此3 + 4(int)和3. + 4.(float)都有效.

F#+自然分配给int,因此let add a b = a + b属于类型int -> int -> int.确实(+)给了我val it : (int -> int -> int) = <fun:it@6-1>.

这导致了以下序列,我认为这非常违反直觉:

> 3. + 4.;;
val it : float = 7.0
> (+);;
val it : (int -> int -> int) = <fun:it@8-2>
Run Code Online (Sandbox Code Playgroud)

所以我的问题是: "重载"是否由编译器中的特殊机制/案例完成,或者这是一个语言范围的事情所以我可能可以定义一个名为add(或其他任何)的函数,它具有一个整数和一个定义浮子(或任何其他类型).

f# ocaml types inline

13
推荐指数
2
解决办法
1755
查看次数

TensorFlow MNIST示例未使用fully_connected_feed.py运行

我能够运行Deep MNIST Example正常,但运行时fully_connected_feed.py,我收到以下错误:

File "fully_connected_feed.py", line 19, in <module>
from tensorflow.g3doc.tutorials.mnist import input_data ImportError: No module named
g3doc.tutorials.mnist
Run Code Online (Sandbox Code Playgroud)

我是Python的新手,所以也可能只是一个常规设置问题.

python tensorflow

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