小编nlu*_*oni的帖子

编译OCaml项目的简单方法是什么?

我正在玩OCaml.我想知道如何做的第一件事是建立一个OCaml项目.现在,我只是想要一些简单的东西,因为我刚学习.任何人都可以指向构建系统以及使用该构建系统的"hello world"类型示例吗?

compiler-construction ocaml build-system ocamlbuild

6
推荐指数
2
解决办法
2446
查看次数

找到所有的替代版本的find_if,而不只是第一个?

是否有一个替代版本std::find_if返回所有找到的元素的迭代器,而不仅仅是第一个?

例:

bool IsOdd (int i) {
  return ((i % 2) == 1);
}

std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);

std::vector<int>::iterator it = find_if(v.begin(), v.end(), IsOdd);
for(; it != v.end(); ++it) {
  std::cout << "odd: " << *it << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

c++ iterator stl

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

OCaml交联

参考链接如何在OCaml中工作?

例如,假设我有3个模块声明为

  • A.ml
  • B.ml
  • C.ml

其中

  • A需要BC
  • B 需求 A

我该如何进行编译?

由于订单是相关的,ocamlc或者ocamlopt我如何修复B和之间的交叉参考A

我想首先他们都汇编成.cmoocamlc -c,然后链接所有的人都在一起,但自从与交换参数将刚刚从一个模块移动到另一个问题没有成功.

具体错误是:

错误:链接A.cmo时出错:引用未定义的全局`B'

(或者反之,如果我交换了args的顺序)

我认为这是一个简单的问题,但我无法解决它...提前感谢

recursion linker ocaml module cross-reference

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

GODI安装问题

我正在尝试在 linux (Ubuntu) 上安装GODI。它是 ocaml 语言的库管理工具。我之前实际上已经安装了这个——两次,但不久前——没有问题——我记得——但这次我无法弄清楚我错过了什么。

$ ./bootstrap --prefix /home/nlucaroni/godi
$ ./bootstrap_stage2
.: 1: godi_confdir: not found
Error: Command fails with code 2: /bin/sh
Failure!
Run Code Online (Sandbox Code Playgroud)

我已将正确的目录添加到路径中,它们显示为一个 quick echo $path,并godi_confdir报告为:

 /home/nlucaroni/godi/etc
Run Code Online (Sandbox Code Playgroud)

(...并且该目录存在,并且存在 godi.conf 文件)。所以,我无法弄清楚为什么./bootstrap_stage2不起作用。

linux ocaml godi

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

OCaml前向声明

有没有办法在OCaml中进行C风格的前向声明?

我的问题是我有两个互相引用的变体:

type path_formula =
  [ `Next of state_formula
  | `Until of (state_formula * state_formula)
  | `UntilB of (state_formula * int * state_formula)  
  ]

type state_formula = 
    [ `True | `False
    | `Not of state_formula
    | `And of (state_formula * state_formula)
    | `Or of (state_formula * state_formula)
    | `Imply of (state_formula * state_formula)
    | `Label of string
    | `Prob` of (boundf * path_formula)
    | `Expc` of (boundi * formula)
    ]
Run Code Online (Sandbox Code Playgroud)

所以这两种类型都必须知道另一种类型..我在Google上搜索它但不幸的是OCaml不是那么广泛使用的编程语言.

ocaml types forward-declaration

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

是否可以获得OCaml程序的AST?

我希望能够获得给定OCaml程序的AST(例如,我想走AST并生成代码的检测版本或进行某种转换).任何OCaml工具都支持此功能吗?

ocaml abstract-syntax-tree camlp4

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

在模块外部使用开放式联合,它们被定义为

为什么这样可以正常工作?

module Account = struct

 type account_type = Current of float | Savings of float

end

let sarah = Account.Current 100.0;;
Run Code Online (Sandbox Code Playgroud)

虽然下面的最后一行产生了Error: syntax error

module Account = struct

  type 'a account_type = [> `Current of float | `Savings of float ] as 'a

end

let pete = Account.`Current 100.0;;
Run Code Online (Sandbox Code Playgroud)

也就是说,为什么我不能在不打开模块的情况下在模块外部使用open union类型?我应该说我发现将最后一行更改为:

open Account;;
let pete = `Current 100.0;;
Run Code Online (Sandbox Code Playgroud)

工作正常,但显然这很麻烦,如果我account_type经常使用,或者我必须Account在使用的任何代码部分的开头打开account_type,这意味着我牺牲了我通过使用签名获得的抽象Account
我'已经浏览了几个OCaml教程以及INRIA文档,我找不到你如何做到这一点.
是否有可能避免每次我想使用时都打开模块account_type

提前致谢,

扎克

ocaml types variant

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

使用开放联合键入定义

1)我有一个开放的联合定义如下:

type 'a choice = [> `One | `Other ] as 'a
Run Code Online (Sandbox Code Playgroud)

然后我尝试定义一个类型choice_list:

type choice_list = choice list
Run Code Online (Sandbox Code Playgroud)

这不起作用.如何定义一个或多个组件是开放联合的类型?

2)如果我放弃创建choice_list类型,只需使用a choice list,当我尝试使用选择列表编写接口/签名语句时,

val choice_handler : choice list -> int
Run Code Online (Sandbox Code Playgroud)

编译器抱怨说type 'a choice = 'a constraint 'a = [> `One | `Other ] is not included in type infection_state. They have different arities.

我的问题是,如何在接口/签名中编写选择列表的类型声明.

ocaml types variant

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

列表中的最后一个元素使用ocaml List.fold_left

我可以通过以下代码找到列表的最后一个元素.

let last (xs:'a list) : 'a =
    let rec aux xs prev =
        match xs with
        | [] -> prev
        | x::ys -> aux ys x in
    match xs with
    | [] -> failwith "no element"
    | x::xs -> aux xs x
Run Code Online (Sandbox Code Playgroud)

如何使用List.fold_leftOCaml中的函数找到同一列表的最后一个元素?提前致谢!

ocaml functional-programming list

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

OCaml:测量顶层的执行时间

我们应该如何测量OCaml顶层函数的执行时间?

ocaml ocaml-toplevel

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