小编Ala*_*aya的帖子

这种自适应因子函数的类型是什么?

我在C++中编写了一个匿名的阶乘函数,并用g ++ 4.9.2编译了我的代码.它运作良好.但是,我不知道我的功能类型.

#include<iostream>
#include<functional>
using std::function;
int main()
{
    //tested at g++ 4.9.2
    //g++ -std=c++1y -o anony anony.cpp
    auto fac = [](auto self,auto n)->auto{
        if(n < 1)
            return 1;
        else 
            return n * self(self,n-1);
    };
    std::cout<<fac(fac,3)<<std::endl;//6
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

所以,我想知道:什么类型facself?如果我只是将C++代码翻译成Haskell,它将无法编译,因为它涉及无限类型:

fac2 self 0 = 1
fac2 self n = n * (self self $ n-1)
Run Code Online (Sandbox Code Playgroud)

我必须定义一些递归类型的工作:

data Y a = Y ((Y a)->a->a)
fac2 self 0 = 1
fac2 self n = n * ((applY …
Run Code Online (Sandbox Code Playgroud)

c++ haskell types generic-lambda c++14

25
推荐指数
3
解决办法
1132
查看次数

我应该使用std :: default_random_engine还是应该使用std :: mt19937?

当我想使用std :: random生成随机数时,我更喜欢哪种引擎?的std::default_random_engine还是std::mt19937?有什么区别?

c++

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

为什么设计CMake以便在安装时删除运行时路径

我自己构建了我的共享库(我使用lib计算斐波纳契数),并希望在我的另一个c ++项目中使用它 CMake

比方说,位于共享库和头文件/path/to/my/lib,共享库libfib.so是在/path/to/my/lib/lib和标题fib.h/path/to/my/lib/include和我自己的项目落户/path/to/my/project

这是我原来的CMakeLists.txt:

cmake_minimum_required(VERSION 3.2)
project(learn-lib)
set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
set(FIB_INCLUDE "${FIB_PREFIX}/include")
set(FIB_LIB "${FIB_PREFIX}/lib")
set(EXE mybin)
include_directories(${FIB_INCLUDE})
link_directories(${FIB_LIB})
add_executable(${EXE} main.cpp)
target_link_libraries(${EXE} fib)
install(TARGETS ${EXE} RUNTIME DESTINATION bin)
Run Code Online (Sandbox Code Playgroud)

我使用这个脚本来构建和安装我的项目:

mkdir -p build_dir
cd build_dir
cmake -DFIB_PREFIX=/path/to/my/lib \
      -DCMAKE_INSTALL_PREFIX=/path/to/my/project \
      ..
make
make install
cd ..
Run Code Online (Sandbox Code Playgroud)

现在,在运行安装脚本之后,我得到了两个可执行文件,一个在build_dir安装位置,一个在安装位置path/to/my/project/bin,当运行程序时build_dir,一切都很好,但是当运行已安装的程序时,我得到:

./bin/mybin:加载共享库时出错:libfib.so:无法打开共享对象文件:没有这样的文件或目录

在google和stackoverflow上进行一些搜索后,我知道CMake在构建时似乎删除了与可执行文件绑定的运行时搜索路径.我现在知道两种方法来解决它:

  1. 添加libfib.so位于环境变量的库路径LD_LIBRARY_PATH
  2. 加入set_target_properties(${EXE} PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE)我的CMakeLists.txt …

c++ cmake shared-libraries hyperlink

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

如何完全删除cabal安装的软件包?

我正在努力学习阴谋,并测试了几个我自己的小项目,现在我想要清理它们.

基本上,如果我没有工作sandbox,我的工作流程是:

  1. cabal init
  2. 编辑src/Mylib.hs,然后编辑mylibname.cabal文件
  3. cabal build
  4. 运行cabal repl并测试我的代码
  5. cabal install

现在,我看到了自己的项目:

  1. 安装到 ~/.cabal/lib/x86-64-linux-ghc-7.10.1
  2. 在.注册 ~/.ghc/package.conf.d

我可以用import Mylib我的其他haskell源代码编写,所以我认为该软件包已成功安装.

然后我想卸载软件包,因为软件包本身只是无意义的实验代码.

我读过这篇文章,他说:

没有"cabal uninstall"命令.您只能使用ghc-pkg取消注册包:

 ghc-pkg unregister
Run Code Online (Sandbox Code Playgroud)

所以我跑了

ghc-pkg unregister mylibname 
Run Code Online (Sandbox Code Playgroud)

现在,似乎该包未注册~/ghc/package.conf.d,但是,仍然有一个编译库 ~/.cabal/lib/x86-64-linux-ghc-7.10.1.

那么,我怎么能完全删除我的项目,我可以只是rm -rf~/.cabal吗?

haskell cabal

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

我怎么能使用clang格式缩进C++编译指示?

我正在使用vim-autoformat,它clang-format用作外部格式化程序.

似乎clang-format不会缩进C++ #pragma.例如:

#include <omp.h>
#include <cstdio>
int main()
{
#pragma omp parallel for
    for (int i = 0; i < 10; ++i)
    {
        puts("demo");
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想把它格式化为:

#include <omp.h>
#include <cstdio>
int main()
{
    #pragma omp parallel for
    for (int i = 0; i < 10; ++i)
    {
        puts("demo");
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我检查了clangformat,但没有找到我可以使用的选项.

c++ coding-style clang-format

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

为什么"cabal update"这么慢,我可以手动完成吗?

在运行时cabal update,00-index.tar.gzhackage下载需要很长时间,但是当我从chrome下载它时,它只是一个9M文件,下载很快完成.

那么,为什么cabal update这么慢,我可以通过手动下载文件来提高性能吗?

至于我正在使用的cabal版本,它是:

cabal-install版本1.22.6.0使用Cabal库的1.22.4.0版本

haskell cabal

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

如何判断文件自上次在vim中保存以来是否已被更改

我试图通过在保存(:w)文件时记录时间戳来量化我的 vim 操作。

是否可以知道自上次保存以来文件是否真的被编辑过?

例如,我保存了文件:w,然后什么都不做,只是:w再次键入保存,是否可以判断该文件实际上没有被修改?

vim

9
推荐指数
3
解决办法
2719
查看次数

为什么std :: less <Eigen :: VectorXd>无法编译?

我实现了一个比较操作operator<Eigen::VectorXd,有时候,我需要通过一个比较功能,以我的另外一个功能,我累了包裹的operator<[](const VectorXd& v1, const VectorXd& v2)->bool{return v1 < v2},所以我认为std::less类是有用的,因为,我的理解,它可以生成lambda函数只要operator<定义.

但是,我发现这std::less<VectorXd>对我不起作用,例如,下面的代码工作正常:

#include "Eigen/Dense"
#include <iostream>
#include <functional>

using namespace std;
using namespace Eigen;

struct T
{
    int x;
};

bool operator<(const T& t1, const T& t2)
{
    return t1.x < t2.x;
}

bool operator<(const VectorXd& v1, const VectorXd& v2)
{
    return (v1.array() <= v2.array()).all() and (v1 != v2);
}
int main()
{
    T t1, t2;
    t1.x = …
Run Code Online (Sandbox Code Playgroud)

c++ eigen eigen3

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

如何利用最近邻搜索算法进行固定半径搜索?

有很多关于最近邻搜索问题的工作,所以我想知道我是否想要进行固定半径范围搜索,我可以利用这些算法进行最近邻搜索吗?

也许我可以一遍又一遍地进行第k次最近邻搜索,直到找到超出半径范围的点,但我想这可能会造成很多浪费.

algorithm nearest-neighbor range-query

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

比较std :: vector的指针以检查相等性是否安全?

在同一时间,我创建了一个指针指向std::vector,然后我做了一些push_back,reserve,resize操作与向量,这样的操作之后,是安全的指针比较的是向量的地址,以检查是否指针指向该向量,因为可能会有一些内存重新分配.

例如

std::vector<int> vec;
vector<int>* pVec = &vec;
vec.reserve(10000);
assert(pVec == &vec);
vec = anotherVec;
assert(pVec == &vec);
Run Code Online (Sandbox Code Playgroud)

更重要的是,将指针与向量的第一个值进行比较是否安全?例如:

std::vector<int> vec(1,0);
int* p = &vec[0];
// some operation here
assert(p == &vec[0]);
Run Code Online (Sandbox Code Playgroud)

正如我自己测试的那样,第一种情况似乎是安全的,而第二种情况则不然,但我不能确定.

c++ pointers vector c++11

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