小编dom*_*ath的帖子

如何在ubuntu 16.04上安装haskell 8

我按照Haskell平台网站上的说明在ubuntu上安装了Haskell.但我最终得到的是版本7.10.3.如何在Ubuntu上获得Haskell 8?

haskell ubuntu-16.04

19
推荐指数
2
解决办法
2万
查看次数

如何建模随机变量?

我想知道如何使用"基本操作"对随机变量进行建模.我知道的唯一一个随机函数,至少对于C来说rand(),srand就像播种一样.可能存在在线某处的软件包,但我想说我想自己实现它.我不知道是否有其他非常常见的随机函数,但如果没有,让我们坚持使用rand()C语言.

rand()允许我伪随机生成一个intfrom 0RAND_MAX.然后我可以mod用来获得int某个范围.接下来我可以mod 2选择一个标志并获得负数.我也可以rand()/RAND_MAX对间隔中的值建模(0,1)并将其转换为模型Uniform(a,b).

但我不确定的是,如果我可以扩展它来模拟任何概率分布,我在什么时候必须担心准确性,特别是在处理无穷大和非理性概率时.此外,这种方法非常粗糙,所以我想知道使用基本工具的更多标准方法(如果有的话).

一个简单的例子:

我有随机变量X这样Pr(X = 1)=1/piPr(X=0)=1-1/pi.既然pi是不合理的,我会得到近似的概率1/pirand()和选择X=1,如果我得到一个int0Round(RAND_MAX*1/pi).所以这是近似的两次,一次pi为圆形,另一次为圆形.

有更好的方法吗?如何建模更复杂的东西,例如区间上的连续随机变量,(0,infinity)或者在可数无限集上具有无理概率的离散随机变量.我的方法是否仍然可行或者我是否需要担心舍入错误?

编辑:另外,伪随机性rand()如何改变事物的随机性以及如何解释这些变化?

c random probability

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

如何安装system.random.也许是堆栈版本8中的cabal问题

我正在使用堆栈ghci版本8在Ubuntu 16.04上工作.我想在Haskell中导入System.Random,但似乎我遇到麻烦,可能涉及Cabal.我在这个网站上看到了类似的帖子,但他们通常说这是因为版本较旧,但我使用的是版本8.

我收到错误:

Failed to load interface for ‘System.Random’
Use -v to see a list of the files searched for.
Run Code Online (Sandbox Code Playgroud)

这告诉我我有System.Random的问题.在网上看,我发现我需要先安装Cabal.

当我输入

Cabal --version
Run Code Online (Sandbox Code Playgroud)

我明白了

cabal-install version 1.22.6.0
using version 1.22.5.0 of the Cabal library 
Run Code Online (Sandbox Code Playgroud)

这告诉我,我已经拥有它.所以当我尝试更新时

sudo apt-get install cabal-install cabal update
Run Code Online (Sandbox Code Playgroud)

我明白了

Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package cabal
E: Unable to locate package update
Run Code Online (Sandbox Code Playgroud)

这很奇怪.如果我忽略它并尝试随机安装随机

cabal install random
Run Code Online (Sandbox Code Playgroud)

我明白了

Resolving dependencies...
All the requested packages are already installed: …
Run Code Online (Sandbox Code Playgroud)

haskell cabal haskell-stack

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

返回c类型数组的迭代器?

在 MRE https://godbolt.org/z/jdjPzdGeo中,有没有一种方法可以返回c类型数组的迭代器,就像您在in和 中Func看到的那样?我不知道返回类型是什么。std::arrayFunc2Func3

另外,有没有办法让Funcconstexpr 像中那样Func2

编辑:在此处添加代码

#include <array>

std::pair<int*, std::size_t>
Func() noexcept
{
    // why does constexpr instead of static not work?
    static int arr[]  = {1, 2};
    return { arr, std::size(arr) };
}

constexpr std::pair<std::array<int,2>::const_iterator, std::array<int,2>::const_iterator>
Func2() noexcept
{
    constexpr std::array<int, 2> arr  {{1, 2}};
    return { std::cbegin(arr), std::cend(arr) };
}

std::pair<std::array<int,2>::const_iterator, std::array<int,2>::const_iterator>
Func3() noexcept
{
    static std::array<int, 2> arr  {{1, 2}};
    return { std::cbegin(arr), std::cend(arr) …
Run Code Online (Sandbox Code Playgroud)

c++ arrays

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

在C中从字符串更改为int时溢出

在C编程语言中,一个字符串如"2147483649"溢出为int,因为最大的unsigned int是2147483647.当我想将整数字符串转换为ints时,如何检查这些溢出情况?

我不能只检查它是否是>=-(2^32-1),<= (2^32-1)因为将此字符串转换为int(例如atoi())的过程已经改变了这个值.是否有一种简单的方法,而不是在转换之前检查字符串的位数,以及每次检查每个数字以确保它在ints 的范围内?

c string int

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

C++在派生类中指定基类的顺序

这可能是一个基本问题,但我没有在任何地方看到它.在C++中,假设我有以下代码:

#include <iostream>

using namespace std;

class B  {
public:
    void f();
};

class C  {
public:
    void f();
};

class D : public B, public C{
public:
    void f();
};

void B::f(){cout << "bbb" << endl;}
void C::f(){cout << "ccc" << endl;}
void D::f(){cout << "ddd" << endl;}

int main () {

B *d = new D;

delete d;
d->f();
return 0;
}
Run Code Online (Sandbox Code Playgroud)

这很好,输出"bbb".但是,如果我要改变顺序

class D : public B, public C{
Run Code Online (Sandbox Code Playgroud)

class D : public C, …
Run Code Online (Sandbox Code Playgroud)

c++

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

Haskell 中使用 monad 的 while 循环示例

我想使用 monad 在 haskell 中编写一个循环,但我很难理解这个概念。

有人可以为我提供一个简单的 while 循环示例,同时满足某些涉及 IO 操作的条件吗?我不想要一个抽象的例子,而是一个真正有效的具体例子。

monads haskell loops while-loop io-monad

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