将翻转 lambda 转换为 SKI 项

2024-01-14

我在将用于翻转的 lambda 转换为 SKI 组合器时遇到问题(我希望这是有道理的)。这是我的转换:

/fxy.fyx
/f./x./y.fyx
/f./x.S (/y.fy) (/y.x)
/f./x.S f (/y.x)
/f./x.S f (K x)
/f.S (/x.S f) (/x.K x)
/f.S (/x.S f) K
/f.S (S (/x.S) (/x.f)) K
/f.S (S (K S) (K f)) K
S (/f.S (S (K S) (K f))) (/f.K)
S (/f.S (S (K S) (K f))) (K K)
S (S (/f.S) (/f.S (K S) (K f))) (K K) 
S (S (K S) (/f.S (K S) (K f))) (K K)
S (S (K S) (S (/f.S (K S)) (/f.K f))) (K K)
S (S (K S) (S (/f.S (K S)) K)) (K K)
S (S (K S) (S (S (/f.S) (/f.K S)) K)) (K K)
S (S (K S) (S (S (K S) (/f.K S)) K)) (K K)
S (S (K S) (S (S (K S) (S (/f.K) (/f.S))) K)) (K K)
S (S (K S) (S (S (K S) (S (K K) (K S))) K)) (K K)

如果我在 B、C、K、W 系统中正确理解,C 是翻转,它在 SKI 术语中的定义是S (S (K (S (K S) K)) S) (K K)。显然我的答案与 C 组合器不同...以下是我用于转换的规则:

K y = /x.y  - K combinator
(SKK) = /x.x  -  I combinator
(S (/x.f) (/x.g)) = (/x.fg)  -  S combinator
y = (/x.yx)  -  eta reduction
/x./y.f = /xy.f  - currying
Note that the S rule can convert longer expressions - for example, λ x.abcdeg can be converted by setting f = abcde.

我缺少什么?


一旦答案被接受,我就修改了它,我发现它实际上是错误的。

你的最终结果是正确的,虽然它不是教科书上的“官方”答案,但有可能不同的SKI术语实际上等同于相同的lambda表达式。

S [S (K S) (S (S (K S) (S (K K) (K S))) K)] [K K] f x y
-> S (K S) (S (S (K S) (S (K K) (K S))) K) f (K K f) x y
-> K S f (S (S (K S) (S (K K) (K S))) K f) (K K f) x y
-> S [S (S (K S) (S (K K) (K S))) K f] (K K f) x y
-> S [S (K S) (S (K K) (K S))] K f x (K K f x) y
-> S [K S] [S (K K) (K S)] f (K f) x (K K f x) y
-> K S f (S (K K) (K S) f) (K f) x (K K f x) y
-> S [S (K K) (K S) f] [K f] x (K K f x) y
-> S [K K] [K S] f x (K f x) (K K f x) y
-> K K f (K S f) x (K f x) (K K f x) y
-> K (K S f) x (K f x) (K K f x) y
-> K S f (K f x) (K K f x) y
-> S [K f x] [K K f x] y
-> K f x y (K K f x y)
-> f y (K K f x y)
-> f y (K x y)
-> f y x

上面的推导基于最左归约顺序,证明您的最终项相当于 C 组合器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将翻转 lambda 转换为 SKI 项 的相关文章

随机推荐

  • 如何为具有动态应用程序 ID 的应用程序指定外部路径

    我在我的应用程序中使用 FileProvider 当我从应用程序中拍摄照片时存储在那里 我的应用程序也有一个不同的应用程序 ID 用于调试和发布版本 com rkmax myapp com rkmax myapp debug 我已经像这样定
  • @SpringBootTest 干扰 EclipseLink 动态编织

    我的公司正在使用 Spring Boot Spring MVC JPA 以及 EclipseLink 和动态编织来开发 Web 应用程序 我的任务是准备 UI 的实现和集成测试 使用 JUnit 和 SpringBootTest 启动应用程
  • 为什么 TimeZone.getTimeZone("MST") 方法与 getTimeZone("US/Mountain") 不同?

    TimeZone getTimeZone US Mountain and TimeZone getTimeZone MST 返回不同的结果 这个java类中的MST不代表 山区标准时间 吗 您不应使用简短的三个字母名称 MST 在Java中
  • 如何让 KendoUI Validator 忽略隐藏的表单元素?

    我正在尝试将 KendoUI Validator 与 ASP NET WebForms 项目一起使用 我有一个简单的页面 有许多输入 当然 ASP NET 也添加了一些隐藏的表单元素 我有以下问题 为什么 KendoUI 验证器不忽略隐藏的
  • 实现 JTree 工具提示的最佳方法?

    由于 JTree 和 TreeModel 不直接提供开箱即用的工具提示 您认为为 JTree 提供特定于项目的工具提示的最佳方式是什么 编辑 之后回答我自己的问题 Zarkonnen 感谢 getTooltipText 的想法 我发现了另一
  • C# 5.0 EBNF 语法

    我正在寻找 5 0 版编程语言 C 的 EBNF 语法 这个语法应该是机器可读的 所以我可以用这个 EBNF 语法做一些处理 直到现在我才发现Visual Studio的安装中包含了C 的语言规范文档 PROGRAMFILES x86 Mi
  • 是否可以将 Zeppelin 笔记与 git 集成?

    是否可以将 Zeppelin 笔记与 git 集成 人们可以设置存储库位置 但如何将其设置为远程 git 存储库 不过 此功能可在 Amazon EMR 上使用 是的 这是可能的 我使用以下方式 创建一个 github 存储库并推送所有笔记
  • HighCharts:如何将自定义颜色与渐变相结合

    一段时间以来 我正在玩饼图的着色 或者我得到了没有渐变的自定义颜色 或者带有渐变的默认颜色 我的颜色存储在 php 字段中 我想像这样加载colors 我的代码的实际状态是这样的 它显示带渐变的默认颜色 colors Highcharts
  • 通过 FCM 消息控制台在后台向我的 iOS 应用程序发送静默通知

    我想向我的 iOS 应用程序发送静默通知 为此我已在其中实现了 FCM 当应用程序在后台运行时 当应用程序从 FCM 收到通知时 我需要执行一些操作 为此 执行过程将进入调用的方法 void application UIApplicatio
  • 仅获取容器中 Azure blob 文件的所有名称?

    我想要容器中 Azure Blob 文件中的所有名称 出于某种目的 我发现了一些类似的问题 甚至在 stackoverflow com 上也发现了一个 获取容器中 Azure blob 文件的名称列表 https stackoverflow
  • 评估 ansible 条件中的返回码

    我正在致力于自动化一项需要将 最新版本的软件附加到文件的任务 我不希望它对同一版本多次执行此操作 它查看以下示例文件 var software releases new Array 4 3 0 4 4 0 4 5 0 4 7 0 4 8 0
  • 从数据表中读取值

    我有一个填充有 samo 数据 值的 DataTable 我想从 DataTable 读取数据并将其传递给字符串变量 我有这个代码 DataTable dr art line 2 ds Tables QuantityInIssueUnit
  • 对数字列表求和比使用 for 循环更快的方法?

    有没有一种方法可以比使用 for 循环更快地对数字列表进行求和 也许在 Python 库中 或者这真的只有多线程 矢量处理才能有效地完成吗 编辑 为了澄清 它可以是任何数字的列表 未排序 只是用户输入的 您可以使用 sum 对数组的值求和
  • CSS3 旋转 - Firefox 和 Safari 中的渲染问题

    我正在尝试使用 CSS3 属性 旋转 将简单的文本行旋转一定角度 精确1 5度 webkit transform rotate 1 5deg moz transform rotate 1 5deg ms transform rotate 1
  • Node-phantom 显示生成的 pdf 页数

    我在获取 phantomjs 中生成的 pdf 页数时遇到问题 基本上我将 phantomjs 与 nodejs 一起使用 我想在第 5 页中显示总页数 function generatePdf Load ejs template fs r
  • 将 List 转换为 List 的最快方法

    获取基元列表并将其转换为可为空的基元列表的最快方法是什么 例如 List
  • 为什么在 Lua 中使用 do-end 块?

    我一直试图寻找这个问题的答案 但未能成功 我想知道 do end 块实际上是用来做什么的 它只是说在我的书中需要时使用值 那么我该如何使用它呢 我是否可以通过将函数放置在 do end 循环中并将局部变量放置在函数外部但在此 do end
  • 结构化绑定,参考 ?是否可以删除它们

    假设我有这样一个元组 std tuple
  • 如何在 React-native 或 Expo 中使用 SVG-Uri?

    我下载了expo svg uri module https github com thongdn it expo svg uri使用 Svg 图像 但图像显示不正确 我失败的代码
  • 将翻转 lambda 转换为 SKI 项

    我在将用于翻转的 lambda 转换为 SKI 组合器时遇到问题 我希望这是有道理的 这是我的转换 fxy fyx f x y fyx f x S y fy y x f x S f y x f x S f K x f S x S f x K