问题标签 [mutual-recursion]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
function - OCaml:在定义函数之前声明它
有没有办法在 OCaml 中定义函数之前声明它?我正在使用 OCaml 解释器。
我有两个功能:
但这不起作用,因为 myFunctionA 在创建之前无法调用 myFunctionB。
我做了一些谷歌搜索,但似乎找不到任何东西。我怎样才能做到这一点?
variables - 定义相互依赖的变量
我需要定义相互依赖的变量。我的意思是一个var包含例如一个带有另一个var的向量,反之亦然。下面的代码说明了这一点:
但是在加载此代码后,我得到了这个:
显然,这不是它应该如何工作的。我知道打印这样的结构会导致堆栈溢出,但我不需要打印它。我该怎么做?
c++ - Resolve circular C++ template dependency
Suppose I have:
How do I resolve the typedef a_with_b?
I want to do this because A has a callback to B, and B has a callback to A. For example, A would call B.do_work(), and eventually B would call A.done_work(). Furthermore, these are each asynchronous calls, so I cannot simply call B.do_work() and wait until B returns "done" because A has other important work to do in the meantime.
The reason I can't just have A take a reference to B is because there can be other implementations that replace B, such as C.
c++ - C++相互模板依赖?
我想要两个指向彼此的结构。具体来说,我想要以下内容:
显然这不起作用,因为 ListType 之前没有声明为类型。我怎么能这样做?如您所见,我使用迭代器类型作为指向这两个结构元素的指针。
我正在考虑使用奇怪的重复模板模式,但无法做到这一点。##c++ 上也有人建议使用模板别名,但也失败了(至少,我不知道如何使用这个想法)。
从概念上讲,我做错了吗?或者也许“不符合 C++ 概念”?我当然可以用 void*s 来做到这一点,但我正在尝试以正确的方式做事 :)
谢谢!
haskell - 如何加速(或记忆)一系列相互递归的函数
我有一个程序,它产生一系列函数f
,g
如下所示:
f x
其中 r 和 s 是和的一些无趣的函数g x
。我天真地希望拥有foo
一个列表意味着当我调用第 n个时,如果它已经计算过它,它将不会重新计算第 (n-1) 个(如果不是函数就会发生这种情况f
)。有没有办法在不将整个程序分开的情况下记住这一点(例如,评估所有相关参数,然后向上工作)?f
f
g
f0
g0
algorithm - 演示良好使用相互递归的示例
我想知道是否有一个非人为的例子,其中相互递归是解决问题的最优雅的解决方案,它不能轻易地减少/内联为单个递归函数。
我已经知道这个例子(来自维基百科)
但说真的,没有一个头脑正常的人会这样检查数字的奇偶性。
我在 SO 上查看了关于此主题的先前答案 -是否有任何相互递归的示例?但没有一个答案是我正在寻找的。
我知道它在递归解析中很有用——可能是实现它的唯一合乎逻辑的方式,但我需要一个更清晰、更具体的示例(最好是数学示例)。
谢谢你的帮助?
编辑:
由于显然每个相互递归函数的元组都可以简化为单个函数,所以我想知道是否存在使用相互递归函数是最好/最易读的方式的情况。
haskell - 为什么 Haskell 不支持相互递归的模块?
Haskell 支持相互递归的 let 绑定,这很棒。Haskell 不支持相互递归的模块,这有时很糟糕。我知道 GHC 有它的.hs-boot
机制,但我认为这有点小题大做。
据我所知,对相互递归模块的透明支持应该相对“简单”,并且可以完全像相互递归的 let-bindings 一样完成:我不会将每个单独的模块作为编译单元,而是将每个强连接组件将模块依赖图作为编译单元。
我在这里错过了什么吗?Haskell 不以这种方式支持相互递归模块是否有任何重要的原因?
c++ - 如何让两个函数相互调用 C++
我有 2 个这样的函数可以对 if 循环进行混淆:
与此有关的问题是,如果我放之前funcA
将无法看到funcB
,反之亦然。funcB
funcA
在此不胜感激任何帮助或建议。
antlr - ANTLR:修复左递归和相互左递归
这是我正在研究的语法的一部分,用于开发一个解析器工具,这对我的研究很重要。它在 ANTLR IDE 下给我一个错误在 eclipse 中说paraction, action, cspaction
是相互左递归的。
我已经在网上扫描了一个解决方案,但不知道我该怎么做。由于这种语言是研究领域的标准,我没有改变语言语义细节的先决条件。
我实际上正在尝试为“Circus”创建一个语法文件,它是一种状态丰富的形式建模语言,它结合了一种称为 Z 的规范语言和一种称为 CSP(通信顺序过程)的过程建模语言,所以是的,这是一个现有语言。由于正在开发中的语言,它现在在学术界使用。我有该语言的 EBNF,我正在尝试将 EBNF 翻译成 ANTLR 中的语法。我已经设法使以下两条规则起作用。但cspaction
似乎很难。
反斜杠是乳胶的一部分,现在可以省略,因为它们用作字符串。请在下面找到 Circus 的完整 EBNF。它来自已发表的论文,马戏团的指称语义。
马戏团的完整 EBNF - http://www.use.com/b1ad2df0609961615fff
types - 什么是相互递归类型?
如果在 ML 中,递归数据类型的示例是:
在 ML 中,什么是相互递归的数据类型以及它的一个例子?