问题标签 [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 投票
2 回答
157 浏览

f# - 如何重新排序这些 F# 函数以使其有意义?

因为我在 Haskell 上表现不错,所以我认为我可以与 F# 相处得很好,但我觉得我被一些简单的问题难住了。我有一些简单的 JSON 解析器的解析代码,如下所示:

那是行不通的,因为 parseObject 不知道 parseValue。也不能扭转它们,否则我会遇到相反的问题。那么我应该在这里做什么?

0 投票
4 回答
270 浏览

.net - 是否可以定义相互依赖并在单独的文件中定义的类型?

我正在尝试实现一个具有扩展解析功能的库。我决定使用 fsyacc,因为我从大学就知道它。不幸的是我遇到了以下问题。

我为我的语法头( Head )定义了一个类,并将其实现放在一个文件中。然后我将解析器定义为:

Fsyacc 生成分离模块(Parser)。为了成功,它必须按以下顺序编译:Head.fs Parser.fs

为了使这个库类似于您在 .NET 中可以找到的库,我想向Head添加一个静态Parse方法。不幸的是,我需要使用Parser模块中的方法。

我知道这种类型的依赖可以用''运算符来解决,但它只适用于在一个文件中定义的类型。

有没有其他方法可以创建相互依赖的类型,即使它们位于单独的文件中?我一直在寻找像 C/C++ 中的声明/实现分离机制,但我找不到任何东西。

0 投票
1 回答
1916 浏览

f# - 组织我的相互递归类型

是否可以将相互递归类型 ( [<Struct>]) 分布在不同的文件中?这些类型直接位于命名空间下。

我的解决方案是将它们放在一个大文件中并使用type ... and ... and ... etc构造。这是唯一的方法吗?

0 投票
3 回答
344 浏览

javascript - 简单的javascript函数定义问题

问题是当 First() 被定义时,我得到了 Second() 没有定义的错误。如何解决?

0 投票
2 回答
1129 浏览

module - 为什么在 OCaml 中的相互递归模块中需要签名?

在 OCaml 中使用相互递归的模块定义时,必须给出签名,即使在.ml文件中也是如此。这是一个烦恼,我还想从 中公开一个给定的接口.mli,因为我最终重复了两次签名。:(!

这是我正在做的事情的粗略近似(Client类型对象知道Server实例化它们的对象。sServer知道它们Client的 s)。

当然,签名在.mli. 为什么这是必要的?

(注意:我不是在抱怨,但实际上想知道是否存在类型理论或“硬编译器问题”相关的原因。)

0 投票
3 回答
3759 浏览

recursion - 相互递归函数的定点组合器?

是否有用于创建相互递归函数元组的定点组合器?即我正在寻找类似 Y-Combinator 的东西,但它需要多个“递归”* 函数,并且会返回一个函数元组?

*:当然不是真正的递归,因为它们被编写为以通常的 Y-Combinator 方式将自己(和兄弟姐妹)作为参数。

0 投票
1 回答
788 浏览

java - Mutual Recursion Question

How do I change two functions that are Mutual Recursive to each other to make them into a linear recursion? Do I have to have both the methods in a single method?

0 投票
3 回答
550 浏览

haskell - 无法理解相互递归

我正在阅读《Haskell 编程》,第 8 章,作者给出了一个编写解析器的例子。完整的来源在这里:http ://www.cs.nott.ac.uk/~gmh/Parsing.lhs 我无法理解以下部分:many 允许零个或多个应用程序p,而many1需要至少一个成功的应用程序:

递归调用如何发生在

vs是 的结果值many p,但是调用了很多 p many1 pmany1在其定义中都有一个 do 表示法,并且再次有结果值v,并且vs,递归调用什么时候返回?为什么以下代码段可以返回[("123","abc")]

0 投票
3 回答
116 浏览

c++ - 谁能向我解释这个输出?

所以我在玩一些思想实验,我想象当两个函数相互递归时会发生什么。如果这两个函数都可能陷入无限循环,其中之一就是这样。

为此,我想到了这个简单的例子:

有趣的是,如果你用 g++ 编译它,它实际上不会打印出任何东西。使用任何 -O 开关编译它,它就会陷入无限循环。

想法?这可能是编译器错误,还是可以预料到的?我认为在 -O 优化的情况下,它会意识到 foo(x) 和 bar(x) 只返回 x。

我没想到它实际上会“优化”调用并完全忽略将“值是”打印到标准输入。

编辑:我在 Cygwin 下使用 GCC 4.5.0 将它编译为 g++ source.cpp (-O1/2/3)。-OX 版本实际上无限循环而没有堆栈溢出。

0 投票
1 回答
1542 浏览

f# - F#:类型和函数之间可以相互递归吗?

我可以使用and关键字来设置相互递归的函数定义。我也可以and用于相互递归的类型,但是如果类型和函数之间存在相互递归的关系怎么办?我唯一的选择是让函数成为类型的成员还是我也可以使用类似于and这里的东西?

编辑:添加一个简化的伪示例,我希望能说明我正在尝试做的事情

所以你可以在这里看到递归关系是相当间接地建立起来的: MethodDef <-> AbstractInst AND MethodDef -> toAbstractInst -> AbstractInstruction (其中 -> 表示“依赖于”)