问题标签 [fixpoint-combinators]

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 投票
5 回答
4319 浏览

haskell - Haskell 中的定点组合器

给定定义,定点组合器并不总是产生正确的答案:

以下代码不会终止:

当然,fix不能总是产生正确的答案,但我想知道,这可以改进吗?

当然对于上面的例子,可以实现一些看起来像的修复

并给出正确的输出。

不使用上述定义(或者更好的定义,因为这个只处理带有 1 个参数的函数)的原因是什么?

0 投票
2 回答
465 浏览

c# - C# 泛型中的定点生成器

我尝试在 C# 中定义一个定点生成器,您可以在许多函数式语言中看到它。我相信 foldr 有时通常是根据定点生成器来定义的。我将展示它的 Haskell 定义,然后展示我在 C# 中的定义。任何帮助是极大的赞赏。

0 投票
2 回答
910 浏览

haskell - 修复 OCaml 中的数据类型

Haskell 中的以下数据类型如何用 OCaml 或 SML 表示?

0 投票
4 回答
824 浏览

haskell - 为什么 GHC 使修复如此混乱?

查看 GHC 源代码,我可以看到修复的定义是:

在一个示例中,修复是这样使用的:

这基本上会产生一个以 1 增加到无穷大的数字序列。为了发生这种情况,修复必须将它接收到的函数作为第一个参数返回到该函数。我不清楚上面列出的修复定义如何做到这一点。

这个定义是我理解修复如何工作的方式:

所以现在我有两个问题:

  1. 在第一个定义中,x是如何表示修复 x的?
  2. 使用第一个定义比使用第二个定义有什么优势吗?
0 投票
2 回答
814 浏览

haskell - haskell - 翻转修复/修复

这是使用的简化版本flip fix
我在一些可能来自谷歌技术谈话或其他谈话的 youtube 视频中看到了这种使用方式。

有人可以给我一些指针(不是一些内存地址,谢谢!)到底fix是什么。我从官方网站上的文档中知道一般定义。而且我在互联网上浏览了很多东西,只是找不到一个全面且易于理解的答案。

对我flip fix来说就像一个谜。在那个特定的函数调用中实际发生了什么?

顺便说一句,我只是在 2 个月前才拿起 Haskell。而且我数学不是很好:(


这是完成该演示的人共享的完整代码,如果有人感兴趣的话:

(哦,这里是解释游戏mastermind Click的 wiki 链接)

0 投票
2 回答
1528 浏览

functional-programming - 定点组合器

我是定点组合器世界的新手,我猜它们习惯于在匿名 lambda 上递归,但我还没有真正使用它们,甚至无法完全理解它们。

我已经在 J​​avascript 中看到了Y 组合器的示例,但无法成功运行它。

这里的问题是,有人可以给出一个直观的答案:

  • 什么是定点组合器(不仅在理论上,而且在某些示例的上下文中,以揭示该上下文中的定点究竟是什么)?
  • 除了 Y 组合器之外,还有哪些其他类型的定点组合器?

加分项:如果示例不只是使用一种语言,最好也使用Clojure

更新:

我已经能够在Clojure中找到一个简单的示例,但仍然很难理解 Y-Combinator 本身:

虽然这个例子很简洁,但我发现很难理解函数中发生了什么。提供的任何帮助都会很有用。

0 投票
2 回答
3400 浏览

haskell - 自由单子和函子的固定点之间的区别?

我正在阅读http://www.haskellforall.com/2013/06/from-zero-to-cooperative-threads-in-33.html,其中抽象语法树派生为代表一组的函子的自由单子指示。我注意到自由单子Free与函子Fix上的定点运算符没有太大区别。

本文使用 monad 操作和do语法以简洁的方式构建这些 AST(固定点)。我想知道这是否是免费 monad 实例的唯一好处?它还支持其他有趣的应用程序吗?

0 投票
2 回答
562 浏览

scheme - 为什么不将 letrec 作为修复?

在论文Fixing Letrec: A Faithful Yet Efficient Implementation of Scheme's Recursive Binding Construct by Dybvig 等人。据说(强调我的):

这些问题的理论解决方案是进行限制letrec,使其左侧未分配,右侧为lambda 表达式。我们将这种形式letrec称为 as fix,因为它相当于定点运算符的广义形式。编译器可以fix 有效地处理表达式,并且不会letrec 违反fix. 不幸的是,letrec以这种方式进行限制不是实现者的选择,并且在任何情况下都会降低构造的通用性和便利性

我没有仔细检查 R5RS 报告,但是我在 Scheme 程序中使用letrec了等效的“命名let”,并且我不清楚论文中提到的不幸后果,有人可以启发我吗?

0 投票
1 回答
158 浏览

haskell - Haskell 中的递归函数与递归 lambda

我有点困惑。在 Haskell 中定义普通的递归函数是没有问题的。同时,还有fix通过定点定义递归 lambda 的标准函数。但是,与直接调用自身的常规递归函数相比,像这样定义的递归 lambda 除了可读性较差之外,还有应用程序开销。那么我在哪里实际上需要递归 lambda 和fix

0 投票
1 回答
220 浏览

haskell - 在 F 代数中为 Fix/Mu 编写通用实例

阅读Milewski 的 F-algebra 文章后,我尝试实现它并用于解决实际问题。但是,我似乎无法弄清楚如何为Fix,

例如,假设我这个简单的代数:

现在我尝试实现一个实例Eq(注意:deriving不起作用):

这就是我卡住的地方。我该如何填写???才能使这项工作?这甚至可能吗?