小编Dou*_*ore的帖子

为什么将标题放在单独的目录中?

我知道在C/C++项目中,将头文件放在一个目录中是很常见的,例如,include在一个单独的目录中实现src.我一直在玩弄不同的项目结构,我想知道是否有任何客观原因,或者仅仅是惯例?

c c++ directory-structure

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

计算构造(Monads,Arrows等)

我对如何在Haskell中建模计算感兴趣.一些资源将monad描述为"可组合计算",将箭头描述为"计算的抽象视图".我从未见过用这种方式描述的幺半群,仿函数或应用函子.他们似乎缺乏必要的结构.

我发现这个想法很有趣,并想知道是否有其他类似的结构.如果是这样,我可以使用哪些资源来熟悉它们?Hackage上是否有任何可能派上用场的软件包?

注意:这个问题类似于 Monads vs. Arrows/sf/ask/167700081/,但我正在寻找超越funtors的构造,applicative仿函数,单子和箭头.

编辑:我承认应用仿函数应该被视为"计算结构",但我真的在寻找一些我还没有遇到过的东西.这包括应用函子,monad和箭头.

monads haskell arrows computation

17
推荐指数
3
解决办法
1624
查看次数

GHCi和编译的代码似乎表现不同

我有一个非常奇怪的问题.与在ghci中运行相比,以下代码在编译时给出不同的结果,

main = do
  putStr "Please enter your name: "
  name <- getLine
  putStr ("Hello, " ++ name ++ ", how are you?")
Run Code Online (Sandbox Code Playgroud)

当它在ghci中运行时,它就像人们期望的那样,

Please enter your name: dglmoore
Hello, dglmoore, how are you?
Run Code Online (Sandbox Code Playgroud)

但是,当我将代码编译为可执行文件时,它需要在生成任何输出之前提供输入,所以我最终得到了这个,

dglmoore
Please enter your name: Hello, dglmoore, how are you?
Run Code Online (Sandbox Code Playgroud)

我以前见过类似的问题,但我似乎无法再找到它.

我在Haskell平台版本2012.2.0.0中使用ghc版本7.4.1.

任何人都知道为什么他们会给出不同的结果以及我如何让这两个版本做"正确"的事情?

io haskell

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

限制类型构造函数中的值

可能重复:
如何创建在特定范围内限定的类型

我有数据类型:

data Expr = Num Int
          | Expression Expr Operator Expr
Run Code Online (Sandbox Code Playgroud)

在问题的上下文中,(Num Int)将表示的数字仅为单个数字.有没有办法确保类型声明中的限制?

当然我们可以定义一个函数来测试它是否Expr有效,但让类型系统处理它会很好.

haskell

5
推荐指数
2
解决办法
2778
查看次数

当没有更多工作时,MPI Slave进程挂起

我有一个我希望并行化的串行C++程序.我知道MPI的基本知识,MPI_Send,MPI_Recv等,基本上,我有一个运行比数据处理算法显著更快的数据生成算法.目前它们是串行运行的,但我认为在根进程中运行数据生成,在从进程上完成数据处理,并从根发送消息到包含要处理的数据的从属.这样,每个从属处理数据集,然后等待其下一个数据集.

问题是,一旦根进程完成生成数据,程序就会挂起,因为从属程序正在等待更多.

这是问题的一个例子:

#include "mpi.h"

#include <cassert>
#include <cstdio>

class Generator {
  public:
    Generator(int min, int max) : value(min - 1), max(max) {}
    bool NextValue() {
      ++value;
      return value < max;
    }
    int Value() { return value; }
  private:
    int value, max;

    Generator() {}
    Generator(const Generator &other) {}
    Generator &operator=(const Generator &other) { return *this; }
};

long fibonnaci(int n) {
  assert(n > 0);
  if (n == 1 || n == 2) return 1;
  return fibonnaci(n-1) …
Run Code Online (Sandbox Code Playgroud)

c++ parallel-processing mpi master-slave

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