如何调用两个函数并将其结果用作彼此的参数?

时间:2014-10-24 20:05:41

标签: recursion ocaml mutual-recursion

我有代码:

let join a ~with':b ~by:key = 
  let rec a' = link a ~to':b' ~by:key
      and b' = link b ~to':a' ~by:(Key.opposite key) in
  a'

和它的编译结果是:

  

错误:此类表达式不允许作为右侧   `让rec'建立完整的

我可以将其重写为:

let join a ~with':b ~by:key = 
  let rec a'() = link a ~to':(b'()) ~by:key
      and b'() = link b ~to':(a'()) ~by:(Key.opposite key) in
  a'()

它是可编译的变体,但实现的函数是无限递归的,它不是我需要的。

我的问题:为什么第一次实施无效?如何调用两个函数并将其结果用作彼此的参数?

我的编译器版本= 4.01.0

1 个答案:

答案 0 :(得分:1)

第一个问题的答案在Section 7.3 of the OCaml manual中给出。这就是它所说的:

  

非正式地,接受定义的类包含那些定义的名称仅出现在函数体内或作为数据构造函数的参数的定义。

您的名字显示为函数参数,不受支持。

我怀疑原因是你不能分配语义。在我看来,你看到的无限计算一般是无法避免的。