问题标签 [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.

0 投票
1 回答
203 浏览

haskell - Eq typeclass function: x == y = not (x /= y) x /= y = not (x == y) 的实现如何工作?

我正在读这本书,它谈到了 typeclass 的定义Eq

等式中有两个函数==/=它们实现为:

书上说它们是相互递归的,函数的结果在另一个函数的项中。

我不明白的是,我在相互递归中看不到基本情况,也不明白为什么函数会停止并返回结果。

0 投票
3 回答
416 浏览

algorithm - 相互递归的实际例子?

我正在阅读有关相互递归的内容。在几乎所有材料中,确定整数是偶数还是奇数的例子都是问题?

显然,上述问题可以使用模数运算符以更简单的方式解决。

另一个例子是找出一个人是女性还是男性的问题。这也可以在不使用递归的情况下以更简单的方式解决。

那么相互递归只是理论上的还是在任何地方我都可以使用它来实际使我的解决方案比使用任何其他技术更简单?

你能举一个这样的例子来帮助我吗?

0 投票
1 回答
2046 浏览

c++ - C++ 相互递归变体类型

我正在尝试使用变体在 c++ 中表示 PDF 对象类型。PDF 对象是以下对象之一:

  • Boolean
  • Integer
  • Real
  • String
  • Name
  • Stream
  • Array<Object>
  • Map<Object, Object>

如您所见,该Object类型是相互递归的,因为该Array类型需要声明该Map类型,而该声明需要声明该Array类型。我怎么能在 C++ 中表示这种类型?如果变体不是最好的方法,那是什么?

这是我迄今为止尝试过的,但由于std::unordered_map(我认为)http://coliru.stacked-crooked.com/a/699082582e73376e的要求,它没有编译

0 投票
3 回答
833 浏览

lisp - Common Lisp 中的相互递归

这是 Common Lisp 代码:

这里的想法是,“take”将给出输入列表中的所有奇数序列元素,“skip”将给出输入列表中的所有偶数序列元素。但是,在这两种情况下都会返回整个列表。

这段代码有什么错误?这是否与 CL 处理列表的方式有关,因为 SML 中的类似代码提供了所需的输出。

0 投票
1 回答
282 浏览

javascript - 遍历嵌套的 Javascript 数组以创建路径

我有一个像这样的任意嵌套数据结构 -

我想遍历级别以创建这样的数组数组

我知道这将需要递归。有任何想法吗?!

0 投票
1 回答
1104 浏览

c# - 这如何导致无限循环?

我坚持维护的一些遗留代码陷入了无限循环(因此我自己似乎在其中);不过,我不知道为什么/如何。

这是应用程序的入口点,它在其中实例化主窗体 (frmCentral):

代码附件 A

然后 frmCentral 的构造函数调用一个名为DBConnection.GetInstance()的(与荣耀相反的是什么?)单例方法:

代码附件 B

这是“美化”的单例/单例方法:

代码展览 C

这会实例化 DBConnection,因此调用它的构造函数:

代码展览 D

我看到代码展览 A 中的 *MessageBox.Show()*s(除非另有说明),然后是代码展览 B,然后是代码展览 C,然后是代码展览 D,然后它在 C 和 D 之间来回切换“直到奶牛回家。”

我不明白为什么 DBConnection 构造函数和 DBConnection GetInstance() 递归地相互调用,虽然......我错过了大海捞针,还是隐藏在视线中的大象,或者......?? ?

更新

更新 2

这里有更多有启发性的晦涩之处:

更新 3

我添加的未捕获异常代码:

不过,我还没有看到任何证据表明曾经到达过这个处理程序(到目前为止,无论如何)。

更新 4

非常有趣 - 在 GetFormTitle 添加一个 MessageBox.Show(或两个)之后:

...这些是我现在看到的 MessageBox.Show() 的序列:

...随后是一轮更追尾的递归消息,直到我热启动(我讨厌与 Fab 4 相矛盾,但与流行的观点相反,幸福绝对不是热启动!*)

...所以就在 MessageBox 消息显示的中间,插入了一个异常!完全宾夕法尼亚嘻哈(关键说唱)!

那是远程桌面调试的最高级展示,LB2!

0 投票
1 回答
392 浏览

recursion - Prolog Mutual recursion

Ok I'm writing some code to go through a check each value by mutual recursion in Prolog. This is my code so far:

I haven't put any code in yet to do with checking (There's two relations as it has to check alternating values), I'm having a problem with the code cycling through until it has an empty list, then it fails and comes back with false (no). Since This code isn't manipulating any code I believe it should come back true as it stands right now. Why isn't it?

0 投票
1 回答
404 浏览

recursion - 如何在 Haxe 中编写相互递归的函数

我正在尝试在 Haxe 3 中编写一个简单的相互递归函数,但无法编译代码,因为首先出现的任何一个相互函数都会报告该组中的其他函数未定义。下面是一个最小示例,其中相互定义的函数odd用于even确定奇偶校验。

尝试将其编译为 neko 给出:

我试图像在 c/c++ 中那样给出odd之前的前向声明even,但它在 haxe3 中似乎是非法的。如何定义像上面这样的相互递归函数?有可能吗?

注意:我希望将两者都包含在全局可见函数中oddeven成为本地函数test

谢谢,

0 投票
1 回答
144 浏览

recursion - How to call two functions and use their results as arguments for each other?

I have code:

and compilation result for it is:

Error: This kind of expression is not allowed as right-hand side of `let rec' build complete

I can rewrite it to:

It is compilable variant, but implemented function is infinitely recursive and it is not what I need.

My questions: Why is first implementation invalid? How to call two functions and use their results as arguments for each other?

My compiler version = 4.01.0

0 投票
1 回答
174 浏览

ocaml - 如何使用没有可变数据的循环创建图形?

我有下一个代码:

如何创建两个相互链接的链接?我试过了:

但它看起来就像一只从自己的鸡蛋中孵化出来的母鸡。 我的问题是:如何使用(以 OCaml 或其他语言)在没有可变数据的情况下创建带循环的图形(例如:双向链表)?