小编bst*_*our的帖子

Ocaml和Opam:未绑定模块Core

我正试图建立一个ocaml环境,并且我遵循了Real World Ocaml beta附录A中的说明.我设置了opam,并在命令中安装了ocaml版本

$ opam switch 4.01.0dev+trunk
Run Code Online (Sandbox Code Playgroud)

过得很好.然后我做了一个

$ eval `opam config env`
Run Code Online (Sandbox Code Playgroud)

引入变化.我正在运行正确的顶级,如

$ which ocaml
Run Code Online (Sandbox Code Playgroud)

输出

/home/bryan/.opam/4.01.0dev+trunk/bin/ocaml
Run Code Online (Sandbox Code Playgroud)

我使用命令从Jane street安装了Core包

$ opam install core
Run Code Online (Sandbox Code Playgroud)

ocamlfind和opam搜索都显示包已正确安装.但是,当我尝试从repl或文件中打开它时,我收到错误'unbound module Core'.例如

$ ocaml
# open Core;;
Error: Unbound module Core
Run Code Online (Sandbox Code Playgroud)

这里有什么我想念的吗?为什么ocaml找不到我安装的模块?提前致谢.

ocaml opam

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

C++模板和Emacs:自定义缩进

据我所知,在emacs中,没有办法在C++中自定义模板列表的结束'>'字符的缩进级别.目前我的emacs缩进方案执行此操作:

template <
    typename T1,
    typename T2,
    typename T3
    >
class X;
Run Code Online (Sandbox Code Playgroud)

我想要的是这样的:

template <
    typename T1,
    typename T2,
    typename T3
>
class X;
Run Code Online (Sandbox Code Playgroud)

将indent变量template-args-cont设置为零将正确缩进'>'字符,但代价是unindenting模板参数列表的实际主体.

来自emacs大师的任何建议吗?

编辑:

我有点使用以下hack:

(defun indent-templates (elem)
  (c-langelem-col elem t)
  (let ((current-line
         (buffer-substring-no-properties
          (point-at-bol) (point-at-eol))))
    (if (string-match-p "^\\s-*>" current-line)
        0
        '+)))
Run Code Online (Sandbox Code Playgroud)

然后在我的自定义主题中将template-args-cont设置为indent-templates,ala:

(c-add-style "my-style"
             '("stroustrup"
                ;; ... Other stuff ...
                (template-args-cont . indent-templates))))
Run Code Online (Sandbox Code Playgroud)

但它仍然很漂亮.它大部分时间都可以工作,但有时emacs会因为认为模板列表是arglist而感到困惑,然后就会出现欢闹.

c++ emacs

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

根据Monad在Applicative方面定义Functor是否更好,反之亦然?

这是一个普遍的问题,与任何一段代码无关.

假设您有一个T a可以给出实例的类型Monad.由于每个单子是Applicative通过分配pure = return(<*>) = ap,然后每一个应用性是Functor通过fmap f x = pure f <*> x,是它更好地定义你的情况Monad,然后再平凡给出T的实例ApplicativeFunctor

对我来说感觉有点落后.如果我在做数学而不是编程,我会认为我会先显示我的对象是一个仿函数,然后继续添加限制,直到我也将它显示为monad.我知道Haskell只是受到类别理论的启发,显然在构建证明时使用的技术不是编写有用程序时会使用的技术,但我想从Haskell社区获得意见.从Monad下往上更好Functor吗?或从Functor最多Monad

monads haskell functor applicative

16
推荐指数
2
解决办法
1359
查看次数

我们可以在C++ 14中省略std :: array的双括号吗?

我现在正在阅读C++ 14的标准草案,也许我的法律术语有点生疏,但我找不到允许初始化如下所示

std::array<int, 3> arr{1,2,3};
Run Code Online (Sandbox Code Playgroud)

合法.(编辑:显然上面是C++ 11中的合法语法.)目前在C++ 11中我们必须将std :: array初始化为

std::array<int, 3> arr{{1,2,3}}; // uniform initialization + aggregate initialization
Run Code Online (Sandbox Code Playgroud)

要么

std::array<int, 3> arr = {1,2,3};
Run Code Online (Sandbox Code Playgroud)

我以为我听说他们在C++ 14中放松了规则,所以我们在使用统一初始化时不必使用双括号方法,但我找不到实际的证据.

注意:我关心这个的原因是因为我目前正在开发一个multi_array类型,并且不想像它一样初始化它

multi_array<int, 2, 2> matrix = {
  {{ 1, 2 }}, {{ 3, 4 }}
};
Run Code Online (Sandbox Code Playgroud)

c++ c++11 c++14

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

GHC的类型有没有系统F-omega的例子?

我正在阅读Lambda-Cube,我对System F-omega特别感兴趣,它允许"类型操作符",即类型取决于类型.这听起来很像GHC的类型系列.例如

type family Foo a
type instance Foo Int = Int
type instance Foo Float = ...
...
Run Code Online (Sandbox Code Playgroud)

其中实际类型取决于类型参数a.我是否认为类型族是ala系统F-omega类型的一个例子?还是我在左外野?

theory haskell ghc type-families

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

C++ 0x Variadic参数包:语法

以下代码片段不会在gcc4.6.1下编译:

template <typename... TS>
void do_stuff(TS... ts)
{
  auto f = [](TS... things) { };
}
Run Code Online (Sandbox Code Playgroud)

它会抛出一个错误,指出包装没有扩展.但是,以下代码可以编译:

template <typename... TS>
void do_stuff(TS... ts)
{
  auto f = [](TS... things...) { };
}
Run Code Online (Sandbox Code Playgroud)

注意参数列表中的内容之后的额外解包操作符.我从未见过在声明过程中必须扩展可变背包的情况.所以我向你们提出的问题是:

这是合法的C++ 0x语法(编译的代码片段)还是在处理可变参数类型时它只是与GCC的怪癖?

c++ gcc c++11

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

在Delphi中明确表达所有权

我主要是C++程序员,我已经习惯了具有类似于类模板std::unique_ptr,std::shared_ptr表达我的对象的所有权等.Delphi的标准库中是否有类似的东西?在编写代码时,是否有任何表达对象所有权的最佳实践?

编辑:由于C++ 11成为标准,有两个轻量级助手类,std::shared_ptrstd::unique_ptr.

如果我创建一个类型的变量std::shared_ptr<int>,它表示一个指向具有共享所有权的int的指针:引擎计数引用,当引用计数达到零时,指针将自动释放.这种类型表示一种"共享所有权",其中许多对象共同负责在完成资源时销毁资源.

相反,std::unique_ptr表达单一所有权.当unique_ptr超出范围时,将自动释放资源.std :: unique_ptr无法复制:一次只能有一个对象拥有此资源,并且只有一个对象负责清理对象.

将这些轻量级类与一个指向int的裸指针进行对比,它可以表示共享所有权,唯一所有权,或者它可以只是对其他地方的对象的引用!类型告诉你什么.

我的问题是:由于Delphi支持对对象的引用,是否有任何机制可以明确说明"我是这个对象的唯一所有者,当我完成它时,我会释放它",vs"我只是保留一个引用此对象以便与它进行交互,但是其他人会清理它"vs"我与许多其他对象共享此对象,并且最后拥有它的任何人都可以清理它."

我知道Collections.Generics有不同的集合,比如TListvs TObjectList,其中TObjectList将释放存储在其中的成员,但TList不会.你可以说TObjectList"拥有"它的元素,而TList则没有.这是我的问题的本质,真的.在设计我自己的课程时,有没有办法在语言中直接表达这些所有权问题?或者是否有开发人员常见的最佳实践/命名约定?

c++ delphi ownership-semantics delphi-xe3

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

更改GNUS组的显示名称

有没有办法在没有实际重命名组的情况下更改GNUS中组显示的名称?我从IMAP服务器上读取了我的电子邮件,组名非常难看(例如nnimap + uwindsor:INBOX.)我尝试使用该命令gnus-group-rename-group但尝试更改实际服务器上的名称.有没有办法简单地将实际名称映射到一些本地显示名称,以使我的组缓冲区更具可读性?

emacs imap gnus

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

Emacs - 连接到守护进程(如果存在)而不使用emacsclient

如果我在系统上运行emacs作为守护进程,我可以使用emacsclient轻松连接到它.我知道.但是,我想知道的是,如果守护程序已在运行,有没有办法告诉emacs(而不是emacsclient)表现得像emacsclient?

例如

# emacs daemon is not running
emacs # should start a new frame

# ...

# emacs daemon IS running
emacs # should actually behave like emacsclient, i.e. connect to my daemon
Run Code Online (Sandbox Code Playgroud)

我能为init.el做些什么来复制这种行为吗?

emacs emacsclient

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

Haskell种类和类型约束

说我有以下类型类

class Silly (t :: * -> *) where
    -- details
Run Code Online (Sandbox Code Playgroud)

我希望能够表达以下约束,但我不确定它是否可能.

class (Silly s) => Willy (s t) where
    -- details
Run Code Online (Sandbox Code Playgroud)

基本上我想对类型构造函数设置约束,而不是整个类型.这甚至可以表达吗?我甚至不确定这种约束会被称为什么,所以谷歌一直没有帮助.

编辑:我有一个数据类型

data Reasoner logic atoms a = Reasoner { unReasoner :: MassAssignment atoms -> a }
Run Code Online (Sandbox Code Playgroud)

有一个Applicative实例.我最初有一个run函数,以便使这些Reasoners更容易,但由于我想利用应用程序的自由可组合性,我定义了一个包含的类型run,ala

class RunReasoner r where
    type MassType r
    type ResultType r
    run :: r -> MassType r -> ResultType r
Run Code Online (Sandbox Code Playgroud)

具有以下实例

instance RunReasoner (Reasoner l as a) where
    type MassType (Reasoner l as a) = …
Run Code Online (Sandbox Code Playgroud)

haskell ghc

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