问题标签 [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.
haskell - Haskell 中的定点组合器
给定定义,定点组合器并不总是产生正确的答案:
以下代码不会终止:
当然,fix
不能总是产生正确的答案,但我想知道,这可以改进吗?
当然对于上面的例子,可以实现一些看起来像的修复
并给出正确的输出。
不使用上述定义(或者更好的定义,因为这个只处理带有 1 个参数的函数)的原因是什么?
c# - C# 泛型中的定点生成器
我尝试在 C# 中定义一个定点生成器,您可以在许多函数式语言中看到它。我相信 foldr 有时通常是根据定点生成器来定义的。我将展示它的 Haskell 定义,然后展示我在 C# 中的定义。任何帮助是极大的赞赏。
haskell - 修复 OCaml 中的数据类型
Haskell 中的以下数据类型如何用 OCaml 或 SML 表示?
haskell - 为什么 GHC 使修复如此混乱?
查看 GHC 源代码,我可以看到修复的定义是:
在一个示例中,修复是这样使用的:
这基本上会产生一个以 1 增加到无穷大的数字序列。为了发生这种情况,修复必须将它接收到的函数作为第一个参数返回到该函数。我不清楚上面列出的修复定义如何做到这一点。
这个定义是我理解修复如何工作的方式:
所以现在我有两个问题:
- 在第一个定义中,x是如何表示修复 x的?
- 使用第一个定义比使用第二个定义有什么优势吗?
haskell - haskell - 翻转修复/修复
这是使用的简化版本flip fix
。
我在一些可能来自谷歌技术谈话或其他谈话的 youtube 视频中看到了这种使用方式。
有人可以给我一些指针(不是一些内存地址,谢谢!)到底fix
是什么。我从官方网站上的文档中知道一般定义。而且我在互联网上浏览了很多东西,只是找不到一个全面且易于理解的答案。
对我flip fix
来说就像一个谜。在那个特定的函数调用中实际发生了什么?
顺便说一句,我只是在 2 个月前才拿起 Haskell。而且我数学不是很好:(
这是完成该演示的人共享的完整代码,如果有人感兴趣的话:
(哦,这里是解释游戏mastermind
Click的 wiki 链接)
functional-programming - 定点组合器
我是定点组合器世界的新手,我猜它们习惯于在匿名 lambda 上递归,但我还没有真正使用它们,甚至无法完全理解它们。
我已经在 Javascript 中看到了Y 组合器的示例,但无法成功运行它。
这里的问题是,有人可以给出一个直观的答案:
- 什么是定点组合器(不仅在理论上,而且在某些示例的上下文中,以揭示该上下文中的定点究竟是什么)?
- 除了 Y 组合器之外,还有哪些其他类型的定点组合器?
加分项:如果示例不只是使用一种语言,最好也使用Clojure。
更新:
我已经能够在Clojure中找到一个简单的示例,但仍然很难理解 Y-Combinator 本身:
虽然这个例子很简洁,但我发现很难理解函数中发生了什么。提供的任何帮助都会很有用。
haskell - 自由单子和函子的固定点之间的区别?
我正在阅读http://www.haskellforall.com/2013/06/from-zero-to-cooperative-threads-in-33.html,其中抽象语法树派生为代表一组的函子的自由单子指示。我注意到自由单子Free与函子Fix上的定点运算符没有太大区别。
本文使用 monad 操作和do
语法以简洁的方式构建这些 AST(固定点)。我想知道这是否是免费 monad 实例的唯一好处?它还支持其他有趣的应用程序吗?
scheme - 为什么不将 letrec 作为修复?
在论文Fixing Letrec: A Faithful Yet Efficient Implementation of Scheme's Recursive Binding Construct by Dybvig 等人。据说(强调我的):
这些问题的理论解决方案是进行限制
letrec
,使其左侧未分配,右侧为lambda
表达式。我们将这种形式letrec
称为 asfix
,因为它相当于定点运算符的广义形式。编译器可以fix
有效地处理表达式,并且不会letrec
违反fix
. 不幸的是,letrec
以这种方式进行限制不是实现者的选择,并且在任何情况下都会降低构造的通用性和便利性。
我没有仔细检查 R5RS 报告,但是我在 Scheme 程序中使用letrec
了等效的“命名let
”,并且我不清楚论文中提到的不幸后果,有人可以启发我吗?
haskell - Haskell 中的递归函数与递归 lambda
我有点困惑。在 Haskell 中定义普通的递归函数是没有问题的。同时,还有fix
通过定点定义递归 lambda 的标准函数。但是,与直接调用自身的常规递归函数相比,像这样定义的递归 lambda 除了可读性较差之外,还有应用程序开销。那么我在哪里实际上需要递归 lambda 和fix
?
haskell - 在 F 代数中为 Fix/Mu 编写通用实例
阅读Milewski 的 F-algebra 文章后,我尝试实现它并用于解决实际问题。但是,我似乎无法弄清楚如何为Fix
,
例如,假设我这个简单的代数:
现在我尝试实现一个实例Eq
(注意:deriving
不起作用):
这就是我卡住的地方。我该如何填写???
才能使这项工作?这甚至可能吗?