问题标签 [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 回答
136 浏览

sml - 在标准 ML 中声明相互依赖的值和函数

您如何在标准 ML 中定义相互依赖的函数和值?

以下程序:

不编译:

是否可以定义cmdsandcmd_help使得它们都相互了解并且也作为顶级定义暴露给程序的其余部分?

0 投票
1 回答
199 浏览

recursion - 在Scheme中进行相互递归的尾调用优化

在为MIT/GNU Scheme(rel 9.2 )开发经典的练习代码oddeven函数时,我遇到了一个问题,即我的代码不会因大整数值而终止。首先,我测试了以下代码,它同时处理正值和负值:

呼叫(assert (equal? #f (even? 100000000001)))(assert (equal? #t (odd? -100000000001)))不会在我的机器上终止,而例如(assert (equal? #f (even? 1001)))(assert (equal? #t (odd? -1001)))做。我的第一个想法是代码没有针对正确的尾递归进行优化,而我在每个函数中没有一个,而是两个尾调用。所以,我决定简化任务,只考虑正整数,如下所示:

但是这个版本也不返回大整数。所以,我有这些相关的问题

  1. 特征。MIT/GNU 方案中的相互递归函数是否完全优化?
  2. 诊断。有什么方法可以告诉Scheme编译器/解释器确实为相互尾递归优化了函数。那么,如何判断问题出在(不存在)尾递归优化或其他问题上。
  3. 什么是正确的相互尾递归?我的初始代码是否符合优化条件?我的第二次参加有资格吗?
0 投票
1 回答
143 浏览

dafny - 如何在 Dafny 中定义相互递归函数的减少?

在“Draft Dafny 参考手册”4.0.2 中,它描述了为相互递归函数定义减少子句,但两个函数中减少的变量都是类型nat。我试图做同样的事情,但没有奏效。一个区别是变量不是同一类型。

任何想法如何定义减少子句都非常感谢。

0 投票
1 回答
40 浏览

antlr4 - ANTLR4 自和互左递归

是否有一个简单的转换或解决方法可以在 ANTLR4 中进行这项工作?

也就是说,a并且b是自左递归和互左递归,其他规则(c, d, p, q, r, s)只是简单规则的占位符。

0 投票
1 回答
315 浏览

recursion - 如何从方案中的列表中制作 HTML,球拍

这是一个很长的问题......我是新加入的,所以请不要攻击我。为我的英语沟通不佳道歉。我有一些定义:

HTML(H) 是其中之一

  • Str
  • Tag

标签是

  • (cons Sym (listof H))

我想使用相互递归,将 HTML 变成真正的 HTML 代码。例如,

变成:

这应该适用于任何列表或字符串。将其转换为 HTML 有以下规则:

  • 字符串不需要转换成 HTML。
  • 每个标签(来自定义)都以 . 开头<tag>和结尾</tag>。所以<html></html>

如果他们输入一个字符串“Hello”,那么它不会转换任何内容。我在这里写了代码,但它不起作用......

如果我输入如下内容:

然后它给了我:

这是一个很长的输出,它不起作用。如何能够解决这个问题?

0 投票
1 回答
153 浏览

haskell - 在 Haskell 中定义 letrec 实现小语言的表达式

我正在为一种小表达式语言编写一个评估器,但我被困在这个LetRec结构上。

这是语言:

到目前为止,这是评估员:

这是我要评估的测试功能:

0 投票
1 回答
108 浏览

haskell - Haskell 相互递归的说明

我遇到了关于相互递归的这些讨论,最初是在let表达​​式的上下文中,即 alet允许绑定相互引用而不考虑顺序。(见这里。)然后我在维基百科上看到了这个讨论。这以 SML 中的数据类型的形式给出了一个示例

我记得,这and是相互递归关系所必需的。它导致了 Haskell 中的这个版本

我对此有一个直观的把握,但是语法很混乱,例如,SMLtree

这是一个元组,对吗?是的,我想我在 Haskell 翻译中看到了一个元组

直观地说,这与树节点可能具有整个Forest(一个或多个)子树的分支功能相同,对吗?但是,HaskellForest数据类型基本上将一个新元素包含在一个(元素)列表Tree的头部,而 SML 版本似乎使用了一个ForestTree*

这意味着创建一个元组?通常,令人困惑的Tree定义,即 aTree可以在其Forest下方有 a。然后就是树的这个定义

其中子树的问题仅限于两个子树。是使用Forest允许一个或多个子节点的唯一方法吗?直观地说,树下没有森林,而是森林的成员。一个问题是,是否可以直接使用常规列表 consing?

0 投票
1 回答
44 浏览

recursion - 球拍两个相互引用的方法

我正在The Little Schemer做练习,但我在 Racket 中使用 DrRacket 做练习。

其中一个练习有两种相互引用的方法。这可以在球拍中完成吗?如果可以,怎么做?

当尝试在 DrRacket ide 中执行此操作时,我收到一个错误,因为在文件中创建的更高版本无法引用后面的内容。我假设这是因为它正在被解释,但我不确定。

有没有办法解决这个问题?

0 投票
1 回答
30 浏览

recursion - 如何解决这个间接递归错误?

对于此代码,我收到以下错误:

对于这个简单的间接递归示例,可能的错误是什么?我什至尝试改变函数的顺序。

0 投票
2 回答
84 浏览

recursion - Julia:关于变量绑定、变异和可变函数的问题

我正在 Julia 中编写代码,该代码从函数中收集一些输出foo(它会改变其输入参数),并且我试图将来自该函数的递归评估附加到一个数组A中。

例如,通过添加到其每个元素来foo!(x)更改 的值。x1

我想创建一个数组A来存储x = f(x)超过固定范围的值。但是,A最终只会包含 的最终值的多个副本f(x),例如,

我试图让它有效地输出类似于

我无法找到有用的资源来加深对突变的理解,或者在 Julia 中执行突变的顺序。在这方面的任何帮助将不胜感激!