标签: ocaml

ocam中的{X with value}

我在Yacfe示例中看到了以下函数调用:

  Visitor_c.vk_program { Visitor_c.default_visitor_c with
    Visitor_c.kexpr = (fun (k, bigf) exp -> 
      match Ast_c.unwrap_expr exp with
      | Binary(e1, Logical (Eq), (((Constant(Int("0")) as _e2),_t),ii)) -> 

          (match Ast_c.get_onlytype_expr e1 with 
          | Some (qu, (Pointer _,_ii)) -> 

              let idzero = Common.tuple_of_list1 ii in
              idzero.cocci_tag := 
                Ast_cocci.MINUS (Ast_cocci.NoPos, [[null_addon]]), [];

          | _ -> k exp
          )
      | _ -> k exp
    );
  } ast;
Run Code Online (Sandbox Code Playgroud)

我可以看到一个函数调用,其中记录初始化为第一个参数,并ast作为第二个参数.

我不熟悉的是表单的语法:

{Visitor_c.default_visitor_c with Visitor_c.kexpr = some_value;}
Run Code Online (Sandbox Code Playgroud)

这意味着什么?我知道记录可以初始化{name=value;name=value;...},但是我不熟悉{X with name=value},你能告诉我它意味着什么吗?

我在Ocaml手册中 …

ocaml

28
推荐指数
2
解决办法
7849
查看次数

Ocaml中的高阶类型构造函数和函子

可以具有以下多态函数

let id x = x;;
let compose f g x = f (g x);;
let rec fix f = f (fix f);;     (*laziness aside*)
Run Code Online (Sandbox Code Playgroud)

是为类型/类型构造函数或模块/仿函数编写的?我试过了

type 'x id = Id of 'x;;
type 'f 'g 'x compose = Compose of ('f ('g 'x));;
type 'f fix = Fix of ('f (Fix 'f));;
Run Code Online (Sandbox Code Playgroud)

对于类型但它不起作用.

这是类型的Haskell版本:

data Id x = Id x
data Compose f g x = Compose (f (g x))
data Fix f = Fix (f (Fix f))

-- …
Run Code Online (Sandbox Code Playgroud)

ocaml functional-programming

28
推荐指数
2
解决办法
4976
查看次数

如何在功能上计算未知大小列表的连续元素之间的差异?

在纯函数式编程语言(如Haskell)中,或者只是以函数方式使用它(例如clojure); 假设你有一个整数的list/seq/enumerable(未知大小),你想要生成一个包含连续项之间差异的新list/seq/enumerable,你会怎么做?

我之前在C#中所做的是折叠列表并将状态对象保留为记录"上一个"项目的聚合值,以便您可以从当前项目对其进行差异处理.结果列表也必须进入状态对象(对于未知大小的列表,这是一个问题)

在功能上做这种事情的一般方法是什么?

ocaml haskell functional-programming clojure

28
推荐指数
5
解决办法
4080
查看次数

如何在OCaml中获得堆栈跟踪?

如果你恰好要求它们,Objective Caml语言只会产生堆栈跟踪 - 对字节码和本机代码有什么要求?

ocaml stack-trace

27
推荐指数
3
解决办法
7838
查看次数

为什么OCaml(+)不是多态的?

我是OCaml新手.我喜欢OCaml的速度,但我并不完全了解它的设计.例如,我希望+运算符是多态的,以支持整数,浮点等.

我们为什么需要+.

polymorphism ocaml addition

27
推荐指数
2
解决办法
3366
查看次数

OCaml - 如何将int转换为字符串?

如何将int转换为字符串?示例:1到"1".

string int ocaml

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

ocaml中"等于(=)"和"相同(==)"之间的区别是什么?

OCaml,我们有两种equity comparisons:

x = y而且x == y,

那么它们之间的区别究竟是什么呢?

x = y是ocaml就像x.equals(y)在Java中一样吗?

并且x == y就像x == y (comparing the address)在Java中?

ocaml functional-programming

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

OCaml语言的IDE

除Camelia之外还有任何值得信赖的OCaml IDE吗?

如果存在,我更喜欢基于eclipse的IDE.

ide ocaml

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

用Lisp以外的语言编写Emacs扩展

我想要一个现有的应用程序(用OCaml编写)并为它创建一个Emacs"接口"(例如,Emacs GDB模式).我更愿意这样做而不需要编写大量的Lisp代码.在MVC术语中,我希望View是Emacs,但是模型和控制器仍然(主要)保留OCaml.

有人知道用Lisp以外的语言编写Emacs扩展的方法吗?这可以采用以某种其他语言绑定到Emacs扩展API的形式(例如,使OCaml成为一流的Emacs扩展语言)或Emacs交互模式,例如,扩展具有可以写入的管道Emacs Lisp表达式并读出结果值.

lisp emacs ocaml

25
推荐指数
2
解决办法
4791
查看次数

了解OCAML IDE?

了解OCAML/CAML IDE?特别是在Linux上运行的那个?

linux ide ocaml typerex

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