标签: ocaml

在二维数组中设置值

当尝试在二维数组中设置值时,如下所示:

let a = Array.make  5 (Array.make 5 0);;
a.(0).(0) <- 4;
Run Code Online (Sandbox Code Playgroud)

由于某种原因,它将放在二维数组中包含的每个数组的4索引处。ja

为什么会这样,我如何才能将其设置为a[i][j]4

arrays ocaml

0
推荐指数
1
解决办法
162
查看次数

这种表达式不允许作为 `let rec' 的右侧

我正在实现Raft协议,我的代码如下:

        let rec request_vote_loop: int = 
          match myState.myRole with
          | Follower -> 0
          | Leader -> 1
          | Candidate -> 
            let trigger = Domain.spawn(fun _ -> Chan.send c TriggerEvent) in
            let request_vote_daemon = Domain.spawn(fun _ -> 
              let rec loop n = 
                if n = 0 then 0
                else let msg = Chan.recv votes in
                match msg with
                | (status, id) -> 
                  Domain.join (Array.get !arr id);
                  if status = 1 then (Array.get votePeers id) := true; (Chan.send c ReceiveVoteEvent); loop (n …
Run Code Online (Sandbox Code Playgroud)

ocaml

0
推荐指数
1
解决办法
99
查看次数

OCaml 中的 if 语句问题

我正在尝试在 OCaml 中编写以下代码:

let a = 0
let b = 1 

if a > b then 
  {
    print_endline "a";
    print_endline "a";
  }
print_endline "b"
Run Code Online (Sandbox Code Playgroud)

然后我遇到了以下错误:

let a = 0
let b = 1 

if a > b then 
  {
    print_endline "a";
    print_endline "a";
  }
print_endline "b"
Run Code Online (Sandbox Code Playgroud)

我尝试过使用beginend关键字。

ocaml

0
推荐指数
1
解决办法
89
查看次数

OCaml初学者需要帮助:出了什么问题?

码:

let rec get_val (x, n) = match x with
    [] -> -1
  | if (n=0) then (h::_) -> h 
    else (_::t) -> get_val(t, n-1)
;;
Run Code Online (Sandbox Code Playgroud)

错误信息:

Characters 55-57:
| if (n=0) then (h::_) -> h 
  ^^
Error: Syntax error
Run Code Online (Sandbox Code Playgroud)

ocaml

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

在功能样式中实现heapify操作

只是想知道有没有办法在功能样式中实现heapify操作?

假设数据类型是:

type 'a heap = Empty | Node of  'a * 'a heap * 'a heap
Run Code Online (Sandbox Code Playgroud)

ocaml haskell functional-programming

-1
推荐指数
1
解决办法
591
查看次数

同时语言翻译OCaml

可能这个问题非常简单,但我是Ocaml编程语言的初学者.我在网上找到了一个用Ocaml编写的解释器,用于WHILE语言.更确切地说,我有5个.ml文件实现:

  • 主要;
  • 语义;
  • 类型;
  • TYPE-检查;
  • 数据流分析;

我如何使用这些文件?例如,如果我想运行用WHILE语言编写的程序,那么我该怎么办?

我试图编译(ocamlc -c file.ml)我有的文件,但没有成功.

我正在使用安装了ocaml软件包的ubuntu.

interpreter ocaml

-1
推荐指数
1
解决办法
399
查看次数

在其他语言中等效的PHP constant()

我希望能够从变量生成的名称中访问常量值,例如,如果变量包含'123',则获取名为'C123'的常量的内容.

在这里搜索之后我可以看到PHP能够做到这一点,但是由于我正在玩Java,OCaml和Fortran,我想知道是否有相同的这些语言?

java ocaml fortran

-1
推荐指数
1
解决办法
169
查看次数

递归优化?

为什么Fibonacci递归程序工作这么久?

这是在OCaml:

let rec fib n = if n<2 then n else fib (n-1) + fib (n-2);;
Run Code Online (Sandbox Code Playgroud)

这是在Mathematica:

Fib[n_] := If[n < 2, n, Fib[n - 1] + Fib[n - 2]]
Run Code Online (Sandbox Code Playgroud)

这是在Java中:

public static BigInteger fib(long n) {
    if( n < 2 ) {
        return BigInteger.valueOf(n);
    }
    else {
        return fib(n-1).add(fib(n-2));
    }
}
Run Code Online (Sandbox Code Playgroud)

因为n=100它工作了很长时间,因为,我猜,它会2^100及时跟踪节点树.

虽然只生成100个数字,但它只能消耗100个内存寄存器和100个计算机.

因此,可以优化执行.

这项任务是什么以及如何解决?由于Mathematica中没有实现解决方案,因此可能不存在.关于此事的研究怎么样?

recursion ocaml functional-programming wolfram-mathematica compiler-optimization

-1
推荐指数
1
解决办法
632
查看次数

为什么类型的星号超载?

我仍然不明白动机.

为什么他们分别为整数和浮点数乘法制作了两个不同的运算符(**.),就好像它们害怕超载一样,但同时它们曾经*用来表示类型的笛卡尔积?

type a = int * int ;;
Run Code Online (Sandbox Code Playgroud)

为什么他们突然变得如此勇敢?为什么不写

type a = int *.. int ;;
Run Code Online (Sandbox Code Playgroud)

或者其他的东西?

是否存在一些关系,这使得笛卡尔积更接近整数乘积并且更远离浮动乘积?

ocaml operator-overloading cartesian-product

-1
推荐指数
1
解决办法
411
查看次数

添加剂持久性ocaml

我无法弄清楚如何提出加法持久性和整数的数字根例如,从起始编号9876获得的序列是(9876,30,3),因此9876的加性持久性为2和a数字根3.

我将整数转换为一个列表(即{9; 8; 7; 6}),然后将列表相加以生成另一个整数,依此类推,直到只剩下数字.如何查看是否只剩下一位数字?数字根是这个数字

math ocaml

-1
推荐指数
1
解决办法
641
查看次数