问题标签 [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.
f# - 如何重新排序这些 F# 函数以使其有意义?
因为我在 Haskell 上表现不错,所以我认为我可以与 F# 相处得很好,但我觉得我被一些简单的问题难住了。我有一些简单的 JSON 解析器的解析代码,如下所示:
那是行不通的,因为 parseObject 不知道 parseValue。也不能扭转它们,否则我会遇到相反的问题。那么我应该在这里做什么?
.net - 是否可以定义相互依赖并在单独的文件中定义的类型?
我正在尝试实现一个具有扩展解析功能的库。我决定使用 fsyacc,因为我从大学就知道它。不幸的是我遇到了以下问题。
我为我的语法头( Head )定义了一个类,并将其实现放在一个文件中。然后我将解析器定义为:
Fsyacc 生成分离模块(Parser)。为了成功,它必须按以下顺序编译:Head.fs
Parser.fs
为了使这个库类似于您在 .NET 中可以找到的库,我想向Head添加一个静态Parse方法。不幸的是,我需要使用Parser模块中的方法。
我知道这种类型的依赖可以用'和'运算符来解决,但它只适用于在一个文件中定义的类型。
有没有其他方法可以创建相互依赖的类型,即使它们位于单独的文件中?我一直在寻找像 C/C++ 中的声明/实现分离机制,但我找不到任何东西。
f# - 组织我的相互递归类型
是否可以将相互递归类型 ( [<Struct>]
) 分布在不同的文件中?这些类型直接位于命名空间下。
我的解决方案是将它们放在一个大文件中并使用type ... and ... and ... etc
构造。这是唯一的方法吗?
javascript - 简单的javascript函数定义问题
问题是当 First() 被定义时,我得到了 Second() 没有定义的错误。如何解决?
module - 为什么在 OCaml 中的相互递归模块中需要签名?
在 OCaml 中使用相互递归的模块定义时,必须给出签名,即使在.ml
文件中也是如此。这是一个烦恼,我还想从 中公开一个给定的接口.mli
,因为我最终重复了两次签名。:(!
这是我正在做的事情的粗略近似(Client
类型对象知道Server
实例化它们的对象。sServer
知道它们Client
的 s)。
当然,签名在.mli
. 为什么这是必要的?
(注意:我不是在抱怨,但实际上想知道是否存在类型理论或“硬编译器问题”相关的原因。)
recursion - 相互递归函数的定点组合器?
是否有用于创建相互递归函数元组的定点组合器?即我正在寻找类似 Y-Combinator 的东西,但它需要多个“递归”* 函数,并且会返回一个函数元组?
*:当然不是真正的递归,因为它们被编写为以通常的 Y-Combinator 方式将自己(和兄弟姐妹)作为参数。
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?
haskell - 无法理解相互递归
我正在阅读《Haskell 编程》,第 8 章,作者给出了一个编写解析器的例子。完整的来源在这里:http ://www.cs.nott.ac.uk/~gmh/Parsing.lhs
我无法理解以下部分:many
允许零个或多个应用程序p
,而many1
需要至少一个成功的应用程序:
递归调用如何发生在
vs
是 的结果值many p
,但是调用了很多 p many1 p
,many1
在其定义中都有一个 do 表示法,并且再次有结果值v
,并且vs
,递归调用什么时候返回?为什么以下代码段可以返回[("123","abc")]
?
c++ - 谁能向我解释这个输出?
所以我在玩一些思想实验,我想象当两个函数相互递归时会发生什么。如果这两个函数都可能陷入无限循环,其中之一就是这样。
为此,我想到了这个简单的例子:
有趣的是,如果你用 g++ 编译它,它实际上不会打印出任何东西。使用任何 -O 开关编译它,它就会陷入无限循环。
想法?这可能是编译器错误,还是可以预料到的?我认为在 -O 优化的情况下,它会意识到 foo(x) 和 bar(x) 只返回 x。
我没想到它实际上会“优化”调用并完全忽略将“值是”打印到标准输入。
编辑:我在 Cygwin 下使用 GCC 4.5.0 将它编译为 g++ source.cpp (-O1/2/3)。-OX 版本实际上无限循环而没有堆栈溢出。
f# - F#:类型和函数之间可以相互递归吗?
我可以使用and
关键字来设置相互递归的函数定义。我也可以and
用于相互递归的类型,但是如果类型和函数之间存在相互递归的关系怎么办?我唯一的选择是让函数成为类型的成员还是我也可以使用类似于and
这里的东西?
编辑:添加一个简化的伪示例,我希望能说明我正在尝试做的事情
所以你可以在这里看到递归关系是相当间接地建立起来的: MethodDef <-> AbstractInst AND MethodDef -> toAbstractInst -> AbstractInstruction (其中 -> 表示“依赖于”)