问题标签 [corecursion]

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 回答
625 浏览

list - 使用变形的列表过滤器

filter使用来自recursion-schemesHackage 库的变形实现了一个损坏的函数:

该函数不是 : 的忠实实现filterxfilter odd [1..5]xfilter odd [0,0]没有。我试图通过使用显式递归来实现“重试”,phi然后用超态重新实现它,所以我以ana . para

这是令人满意的,但我随后尝试在内部明确表达重试phi并在外部执行它们:

Right意思是“产生一个新元素”,Left意思是“用新种子重试”。

的签名phi开始看起来与专门用于列表的同态的第一个参数非常相似:

[a] -> Either [a] [a][a] -> Prim [a] [a] (Either [a] [a]

所以我想知道是否有可能使用同构或其他广义展开来实现过滤,或者ana . para是我所希望的最好的?

我知道我可以使用折叠,但问题是专门关于展开的。

0 投票
1 回答
167 浏览

haskell - 当我给它这个核心递归值时,为什么 :p 在 GHCi 中冻结?

我已经定义了无限列表的无限列表pathCounts和有限列表的无限列表pathCounts'

进入 ghci,如果我根本没有评估任何一个,我可以:p成功使用任何一个:

但是,如果我部分评估pathCounts',然后在仍然成功的同时:p冻结:pathCountspathCounts'

我希望:p pathCounts打印与 相同的:p pathCounts'内容,因为我只对其进行了部分评估。为什么它不起作用?

0 投票
1 回答
80 浏览

python - Python:在运行时创建生成器

我知道在 python 中可以分别使用 type 和 lambda 在运行时创建类和函数,但是可以在运行时创建生成器吗?

示例:关键字、条件、操作、产量

lambda x,a: a<x,a++,a

0 投票
1 回答
88 浏览

isabelle - 定义核心递归树时出现“无效的映射函数”

我正在做我的第一次实验codatatype,但我很早就被困住了。我从这个分支的定义开始,可能是无限的树:

并且一些定义工作正常:

但这不起作用:

当我收到错误消息时

我可以通过写作来解决它

这让人相信primcorec需要“了解”函数更新运算符,类似于fun需要fundef_cong引理和inductive需要mono引理。但究竟是什么?

0 投票
3 回答
418 浏览

c++ - 如何在 C++ 中完成 corecursion?

我正在开发一个需要与树结构频繁交互的 C++ 项目,这意味着很多递归函数,我正在寻找改进代码的方法。前几天我遇到了corecursion,我有兴趣为我的应用程序探索这种策略。

但是,我还没有找到任何关于如何使用 C++ 完成 corecursion 的示例。为了具体说明我的问题,如何在 C++ 中使用 corecursion 进行树遍历?

如果这样做只是一个坏主意,请告诉我。也就是说,在互联网上对此有一些答案对于将来尝试这样做的人很有用。没有关于 SO 匹配的问题[c++] corecursion,互联网的其余部分似乎没有关于该主题的有用信息。

0 投票
0 回答
121 浏览

recursion - 生成递归与核心递归

Wikipedia 对递归的讨论表明,生成递归函数“通常可以被解释为核心递归函数”(强调我的),而 Wikipedia 对corecursion的讨论使得这两者听起来像是同义词,当它指出“一些作者将此 [corecursion] 称为生成递归。”

生成递归和核心递归有什么区别?它们是严格的同义词,还是有时生成递归的东西不是核心递归的?

0 投票
5 回答
1507 浏览

c# - 可从链式任务中观察到

我正在尝试创建一个 Observable,其中每个项目都是通过异步任务生成的。下一项应通过对上一项的结果(共同递归)的异步调用来生成。在“生成”的说法中,这看起来像这样 - 除了生成不支持异步(也不支持初始状态的委托)。


作为更具体的示例,要通过一次获取 100 条消息来查看 ServiceBus 队列中的所有消息,请实现 ProduceFirst、Continue 和 ProduceNext,如下所示:

然后调用.SelectMany(i => i)IObservable<IEnumerable<BrokeredMessage>>它变成一个IObservable<BrokeredMessage>

其中 _serviceBusReceiver 是一个接口的实例,如下所示:

BrokeredMessage 来自https://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.brokeredmessage.aspx

0 投票
1 回答
542 浏览

haskell - (共)递归定义如何在 Haskell 中工作?

我正在玩弄这种语言来开始学习,我对递归定义的工作原理感到困惑。

例如,让我们取三角数的序列 ( TN n = sum [1..n])

提供的解决方案是:

到目前为止,一切都很好。

但我确实想出的解决方案是:

这也是正确的。

现在我的问题是:这如何转化为较低级别的实现?当满足这样的递归定义时,幕后究竟会发生什么?

0 投票
2 回答
172 浏览

c - How to use corecursion in c?

I need help trying to find where to place the print statements in each function (alpha_count and sum_digits) so that they will only print once (at the end of the program).

Ex.
Number of characters: 8
Sum of digits: 19

As of right now they print each time the function has been called. Any ideas?

0 投票
1 回答
39 浏览

isabelle - 意外的核心递归调用

Isabelle 中的这个(修剪掉的)核心递归函数定义

产量

但如果我进一步简化为

有用。

我也尝试使用解构视图,即

现在我收到一条不同的错误消息:Invalid map function at "case undefined of Reg c ⇒ tree Γ v |`| undefined".

可能是什么原因?

使用其他case表达式它可以工作,我没有在文档中找到任何提及限制(数据类型文档中的第 5.1.1 节。)