小编rpg*_*rpg的帖子

在c ++ 11中实现Haskell的Maybe Monad

我正在尝试使用C++ 11和模板中的lambda函数从Haskell实现Maybe monad.这是我到目前为止所拥有的

#include<functional>
#include<iostream>
using namespace std;

template<typename T1>
struct Maybe
{
  T1 data;
  bool valid;
};

template<typename T1, typename T2>
Maybe<T2> operator>>=(Maybe<T1> t, std::function < Maybe<T2> (T1)> &f)
{
  Maybe<T2> return_value;
  if(t.valid == false)
  {        
    return_value.valid = false;
    return return_value;
  }
  else
  {        
    return f(t.data);
  }            
}


int main()
{
  Maybe<int> x = {5, true};
  Maybe<int> y = {29, false};

  auto z = [](int a) -> Maybe<int>
    {
      Maybe<int> s;
      s.data = a+1;
      s.valid = true;
      return s; …
Run Code Online (Sandbox Code Playgroud)

c++ monads lambda haskell c++11

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

哪个haskell库会让我将2D数组/矢量保存到png/jpg/gif ...文件?

我正在玩haskell,从简单的绘图程序开始弄湿我的脚.我需要一个库,让我将2D数组/矢量保存到图像文件中.我不想写一份颜色列表.我想使用用于数组/矢量计算的容器,并且可以(好吧,几乎)自动并行化.

编辑存储彩色图像的能力是必须的.

arrays haskell multicore image-processing

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

哪个haskell数组实现使用?AKA各有利弊

我需要什么?[无序列表]

  • 非常简单的并行化
  • 支持地图,过滤等
  • 执行基于数组计算能力有效地,如A = B + C,有点像MATLAB阵列.
  • 生成SIMD代码.我想这在不久的将来是不可能的任何事情,但嘿,我可以问:)
  • 对矩阵的支持应该至少存在,更高的维度现在是较低的优先级.
  • 能够获得指向它的指针并从C指针创建一个指针.
  • 其他图书馆的支持.IE,绑定到流行的C数学包,i/o到磁盘或图像,如果数组是2D

我看到了什么?

  • haskell-platform中的数组包.这是幸运的,可以并行
  • Data.Vector.有循环融合,但不是在平台上,所以它的成熟度对我来说是未知的.
  • 维修包,由DPH团队提供,但今天对任何稳定的ghc都不能很好地运作.
  • 阵列实现的支持级别有很多变化.例如,似乎没有一种简单的方法将2D矢量转储到图像文件.IOW,haskell社区显然还没有确定阵列实现.

所以,请帮我选择.

编辑 A = B + C指的是元素加法,而不是列表串联

arrays haskell multicore vectorization

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

位移编译器错误或角落案例?

以下代码输出0,1,32,33.至少可以说这是违反直觉的.但是如果我用类型annonated constant"ONE"替换文字1,循环运行正常.

这是使用gcc 4.6.2和-std = c ++ 0x.

#include<iostream>
#include<cstdint>
using namespace std;
int main()
    {
    int64_t bitmask = 3;
    int64_t k;
    const int64_t ONE = 1;
    cout<<"bitmask = "<<bitmask<<endl;

    for(k=0; k<64; k++)
        {
        if(bitmask & (1<<k))
            {
            cout<<"k="<<k<<endl;
            }
        }

    return 0;
    } 
Run Code Online (Sandbox Code Playgroud)

编辑 问题:正如Ben指出的那样,默认情况下,1被视为32位宽.当它的协同操作数是64位时,为什么它不会被提升为64位.

没有.<<不要求每一方都有相同的类型.毕竟,为什么当可用的最大移位适合char时,右侧是int64_t?促销仅在您处理算术运算符而非所有运算符时发生.

复制自Bill的评论如下

c++ gcc bit-shift c++11

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

SWIG:未定义任何类型地图

我有一个c ++类,我试图使用SWIG为Python包装.我在尝试包装一个以数组作为输入的函数时遇到了麻烦.

这是头文件,

class dyndiff_data_t
    {
    private:    

        double H[3];
        double GAMMA;
        double k;
        double P;
    public:
        dyndiff_data_t(double H_[3],
                        const double GAMMA_,
                        const double k_,
                        const double P_);

        void test();
    };
Run Code Online (Sandbox Code Playgroud)

这是swig接口文件,

%module twowave
%{
  #define SWIG_FILE_WITH_INIT
  #include <twowave.h>
%}

%include "numpy.i"
%init %{
import_array();
%}

%apply (double IN_ARRAY1[3]) {(double H_[3])};

%include <twowave.h>
Run Code Online (Sandbox Code Playgroud)

问题是对于数组输入,SWIG抱怨没有类型映射.我不明白为什么.numpy.i文件是从这里获取的,我在这里使用的是我使用的类型映射

任何帮助,将不胜感激.

python swig numpy

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

为什么我不能在c ++ 0x中的lambda中声明一个struct变量?

这是代码.

#include<struct.h>
#include<iostream>
#include<functional>
using namespace std;

void LambdaTest(const function <struct dummy (void)>& f)
    {
    struct dummy test = f();
    cout<<test.a<<endl;
    }

int main()
    {
    int val = 5;
    struct dummy dum;

    auto func = [val](void) -> struct dummy
                        {
                        dummy temp;
                        temp.a = val;
                        return temp;
                        };

    LambdaTest(func);
    return 0;
    }
Run Code Online (Sandbox Code Playgroud)

文件struct.h非常简单.

struct dummy
    {
    int a;
    };
Run Code Online (Sandbox Code Playgroud)

海湾合作委员会抱怨说

lambda_struct.cpp:19:38:错误:字段'temp'的类型不完整

这是允许的吗?如果是,那我该如何解决呢?如果没有,那么为什么不呢?

编辑:

代码中的返回类型错误(由他人发现)现在已得到修复.

解:

问题是C++ 0x标准允许在lambda定义本身的返回类型中定义一个新结构(也可能是一个类).因此,如果返回类型中存在struct关键字,编译器将认为它是一种新类型并开始抱怨.

固定代码是

#include<struct.h>
#include<iostream>
#include<functional>
using namespace std;

void LambdaTest(const function <struct …
Run Code Online (Sandbox Code Playgroud)

c++ lambda gcc c++11

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