问题标签 [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.
sml - 在标准 ML 中声明相互依赖的值和函数
您如何在标准 ML 中定义相互依赖的函数和值?
以下程序:
不编译:
是否可以定义cmds
andcmd_help
使得它们都相互了解并且也作为顶级定义暴露给程序的其余部分?
recursion - 在Scheme中进行相互递归的尾调用优化
在为MIT/GNU Scheme(rel 9.2 )开发经典的练习代码odd
和even
函数时,我遇到了一个问题,即我的代码不会因大整数值而终止。首先,我测试了以下代码,它同时处理正值和负值:
呼叫(assert (equal? #f (even? 100000000001)))
并(assert (equal? #t (odd? -100000000001)))
不会在我的机器上终止,而例如(assert (equal? #f (even? 1001)))
并(assert (equal? #t (odd? -1001)))
做。我的第一个想法是代码没有针对正确的尾递归进行优化,而我在每个函数中没有一个,而是两个尾调用。所以,我决定简化任务,只考虑正整数,如下所示:
但是这个版本也不返回大整数。所以,我有这些相关的问题:
- 特征。MIT/GNU 方案中的相互递归函数是否完全优化?
- 诊断。有什么方法可以告诉Scheme编译器/解释器确实为相互尾递归优化了函数。那么,如何判断问题出在(不存在)尾递归优化或其他问题上。
- 什么是正确的相互尾递归?我的初始代码是否符合优化条件?我的第二次参加有资格吗?
dafny - 如何在 Dafny 中定义相互递归函数的减少?
在“Draft Dafny 参考手册”4.0.2 中,它描述了为相互递归函数定义减少子句,但两个函数中减少的变量都是类型nat
。我试图做同样的事情,但没有奏效。一个区别是变量不是同一类型。
任何想法如何定义减少子句都非常感谢。
antlr4 - ANTLR4 自和互左递归
是否有一个简单的转换或解决方法可以在 ANTLR4 中进行这项工作?
也就是说,a
并且b
是自左递归和互左递归,其他规则(c
, d
, p
, q
, r
, s
)只是简单规则的占位符。
recursion - 如何从方案中的列表中制作 HTML,球拍
这是一个很长的问题......我是新加入的,所以请不要攻击我。为我的英语沟通不佳道歉。我有一些定义:
HTML(H) 是其中之一
Str
Tag
标签是
(cons Sym (listof H))
我想使用相互递归,将 HTML 变成真正的 HTML 代码。例如,
变成:
这应该适用于任何列表或字符串。将其转换为 HTML 有以下规则:
- 字符串不需要转换成 HTML。
- 每个标签(来自定义)都以 . 开头
<tag>
和结尾</tag>
。所以<html>
和</html>
。
如果他们输入一个字符串“Hello”,那么它不会转换任何内容。我在这里写了代码,但它不起作用......
如果我输入如下内容:
然后它给了我:
这是一个很长的输出,它不起作用。如何能够解决这个问题?
haskell - 在 Haskell 中定义 letrec 实现小语言的表达式
我正在为一种小表达式语言编写一个评估器,但我被困在这个LetRec
结构上。
这是语言:
到目前为止,这是评估员:
这是我要评估的测试功能:
haskell - Haskell 相互递归的说明
我遇到了关于相互递归的这些讨论,最初是在let
表达式的上下文中,即 alet
允许绑定相互引用而不考虑顺序。(见这里。)然后我在维基百科上看到了这个讨论。这以 SML 中的数据类型的形式给出了一个示例
我记得,这and
是相互递归关系所必需的。它导致了 Haskell 中的这个版本
我对此有一个直观的把握,但是语法很混乱,例如,SMLtree
有
这是一个元组,对吗?是的,我想我在 Haskell 翻译中看到了一个元组
直观地说,这与树节点可能具有整个Forest
(一个或多个)子树的分支功能相同,对吗?但是,HaskellForest
数据类型基本上将一个新元素包含在一个(元素)列表Tree
的头部,而 SML 版本似乎使用了一个Forest
Tree
*
这意味着创建一个元组?通常,令人困惑的Tree
定义,即 aTree
可以在其Forest
下方有 a。然后就是树的这个定义
其中子树的问题仅限于两个子树。是使用Forest
允许一个或多个子节点的唯一方法吗?直观地说,树下没有森林,而是森林的成员。一个问题是,是否可以直接使用常规列表 consing?
recursion - 球拍两个相互引用的方法
我正在The Little Schemer做练习,但我在 Racket 中使用 DrRacket 做练习。
其中一个练习有两种相互引用的方法。这可以在球拍中完成吗?如果可以,怎么做?
当尝试在 DrRacket ide 中执行此操作时,我收到一个错误,因为在文件中创建的更高版本无法引用后面的内容。我假设这是因为它正在被解释,但我不确定。
有没有办法解决这个问题?
recursion - 如何解决这个间接递归错误?
对于此代码,我收到以下错误:
对于这个简单的间接递归示例,可能的错误是什么?我什至尝试改变函数的顺序。
recursion - Julia:关于变量绑定、变异和可变函数的问题
我正在 Julia 中编写代码,该代码从函数中收集一些输出foo
(它会改变其输入参数),并且我试图将来自该函数的递归评估附加到一个数组A
中。
例如,通过添加到其每个元素来foo!(x)
更改 的值。x
1
我想创建一个数组A
来存储x = f(x)
超过固定范围的值。但是,A
最终只会包含 的最终值的多个副本f(x)
,例如,
我试图让它有效地输出类似于
我无法找到有用的资源来加深对突变的理解,或者在 Julia 中执行突变的顺序。在这方面的任何帮助将不胜感激!