小编Gai*_*ius的帖子

电池和核心的优点和缺点是什么?

在目前的OCaml世界中,标准库似乎有许多竞争扩展,据我所知,BatteriesJane Street Core是主要的扩展(我知道ExtLib已被归入电池?).每个人的利弊是什么?它们是等价的吗?他们可以共存吗?"混合搭配"是否有意义,或者我应该选择并专注于它?Core是否在Jane Street之外广泛使用?

如果它对Debian有所帮助,那么Windows支持对我来说不是一个因素.

谢谢!

ocaml

37
推荐指数
2
解决办法
5339
查看次数

保存我的跑步以供以后使用

当我ocaml或者在ghci办公室工作时,我经常会为了更好的单词,值绑定,函数,加载的模块等建立一个重要的"上下文".有没有办法保存所有这些并在以后重新加载它,所以我可以继续我离开的地方?或者更好的是,将整个批次转储为可以重新加载的文本文件,或者将其简单地修改为可以编译成可执行文件的代码(例如通过添加Main)?

ocaml haskell ghci read-eval-print-loop

29
推荐指数
6
解决办法
851
查看次数

在OCaml自定义顶层中设置提示

在OCaml自定义顶层中,有没有办法以编程方式将提示设置#为其他内容?我希望能够更改它以响应用户的最后一个自定义函数(有点像bash你可以设置PS1).我甚至找不到#directive来改变它.谢谢!

ocaml

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

如何在GDB中使用跟踪

gdb文档中:

tracepoint工具目前仅适用于远程目标.请参阅指定调试目标一节.此外,远程目标必须知道如何收集跟踪数据.此功能在远程存根中实现; 但是,在撰写本文时,与GDB一起分发的存根都不支持跟踪点.

强调我的.我在哪里可以获得这样的存根(对于在Debian x86或x64上使用GCC编译的C/C++代码)?或者我该怎么做?有关编写存根的文档仅提及实现与串行端口通信的功能.谢谢!

c debugging debian gdb remote-debugging

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

从OCaml获取C二进制数据

(为了论证而忽略字节序 - 这只是一个测试用例/概念证明 - 我也绝不会strcpy在实际代码中使用!)

考虑以下简单的C代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* variables of type message_t will be stored contiguously in memory */
typedef struct {
  int message_id;
  char message_text[80];
} message_t;

int main(int argc, char**argv) {
  message_t* m = (message_t*)malloc(sizeof(message_t));
  m->message_id = 1;
  strcpy(m->message_text,"the rain in spain falls mainly on the plain");

  /* write the memory to disk */
  FILE* fp = fopen("data.dat", "wb");
  fwrite((void*)m, sizeof(int) + strlen(m->message_text) + 1, 1, fp);
  fclose(fp);

  exit(EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)

它写的文件很容易从磁盘中读回: …

c ocaml ffi binary-data

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

jq的无效数字文字

我想使用jq预处理来自第三方系统的大量JSON,但是我在编写查询时遇到困难,测试用例如下:

$ cat test.json
{
  "a": "b",
  "c": "d",
  "e": {
         "1": {
            "f": "g",
            "h": "i"
          }
       }
}
$ cat test.json|jq .e.1.f
jq: error: Invalid numeric literal at EOF at line 1, column 3 (while parsing '.1.') at <top-level>, line 1:
.e.1.f
Run Code Online (Sandbox Code Playgroud)

我在这里如何得到“ g”作为输出?或如何将1强制转换为“ 1”,以便正确处理?

json jq

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

计算递归次数

我有一些代码可以反复接近一个解决方案,它实际上做的并不重要,但它通过改变mg(m猜测,从4.0开始因为我"知道"它应该在球场中)而对r'== rt有效. .

solve_m f ar st qt = solve_m' f ar st qt 4.0
  where
    solve_m' f ar st qt mg 
      | rd > precis    = f' (mg - sf)  
      | rd < (-precis) = f' (mg + sf)  
      | otherwise = mg
        where 
          f' = solve_m' f ar st qt
          rt = st + qt   
          r' = f st ar mg 
          rd = rt - r'    
          sf = abs(rd) 
Run Code Online (Sandbox Code Playgroud)

我想要做的是计算周期数,我知道正确的方法是使用State monad,但是最优雅的方法是将put/get放入这样的函数中?让f'成为阻止?或者只是添加一个计数器solve_m'并返回(counter,mg)?

谢谢!

编辑:这似乎基本上是我想要的,没有必要的Monads:

solve_m f ar st qt …
Run Code Online (Sandbox Code Playgroud)

haskell

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

用于安装OCaml库的Makefile

对于OCaml库,我需要在我的目标installuninstall目标中Makefile做些什么才能使其与其他安装完美配合ocamlfind,与之无缝协作等等?基本上是一个"好公民".我现在对GODI不感兴趣.谢谢!

debian ocaml makefile

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

在OCaml库中仅运行一次代码

我正在编写一个OCaml库,它有一些初始化代码,在程序的生命周期中只需要运行一次(并存储一些将在程序的生命周期内持续存在的状态,但只能在库本身内使用) ),以及一些需要仅在使用库的程序退出时运行的清理代码.

如果它是相关的,我的库是两部分:一个低级C库的接口,以及一些更高级的东西,使它更容易编程.我可以在C中的某个地方做我需要的吗?理想情况下,我的用户不关心它是如何实现的,他们永远不会看到C位.

在Python中,我会通过运行代码来实现这一点,import但OCaml open实际上并没有运行任何东西,它只是模块化模块命名空间,然后是Python atexit,但我找不到Ocaml等价物.

我考虑过的一种方法是将我的库构建为"框架",但我认为保证这种过度设计的方法并不重要.谢谢!

更新:好的,我想.我正在使用C代码来处理退出时的清理,并且我已经对代码进行了一些处理,因此有一个指向C端全局状态的指针

它会出现在我的图书馆我现在有

let global_env = env_create ()
Run Code Online (Sandbox Code Playgroud)

当它open由主程序执行时,它确实可以运行......但是怎么样?

c ocaml native-methods

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