haskell - 具有自定义类型的 Haskell Church 数字
问题描述
我正在尝试解决 Church 数字解析器我有一个自定义类型,可以区分变量、lambda 和应用程序
type Var = String
data Term =
Variable Var
| Lambda Var Term
| Apply Term Term
deriving Show
我有一个名为church
我可以为不同的教堂手动定义案例的功能。所以让我们说:
church 0
Lambda "f" (Lambda "x" (Variable "x"))
church 1
应该输出Lambda "f" (Lambda "x" (Apply (Variable "f") (Variable "x")))
church 2
应该输出Lambda "f" (Lambda "x" (Apply (Variable "f") (Apply (Variable "f") (Variable "x"))))
等等。
我尝试按照以下方式递归调用教堂功能:
church :: Int -> Term
church 0 = Lambda "f" (Lambda "x" (Variable "x"))
church i = Apply (church(i -1)) (Apply (Variable "f") (Variable "x"))
然而,这也不断重复部分Lambda "f" (Lambda "x"
我尝试过的另一种方法是
church :: Int -> Term
church 0 = Lambda "f" (Lambda "x" (Variable "x"))
church i = Apply (church (i -1)) (Apply (Variable "f") (Variable "x"))
然而,这也会产生复制 lambda 的结果。我在这里错过了什么吗?我怎样才能只重复申请部分(Apply (Variable "f") (Variable "x"))
解决方案
推荐阅读
- jenkins - 获取变量中詹金斯每个阶段的结果
- arrays - 使用 VBA 将 Excel 数据导出到 Json 动态数组
- android - Android 游戏 - 如果游戏在 GLSurfaceView 的视频线程中运行,如何正确处理 onPause 和 onResume
- php - Laravel:单击html按钮时显示具有相同URL的列表
- mongodb - 如何使用 id 显示名称但使用 2 个集合 MongoDb 中的数据?
- rest - 如何从 HERE REST API 中的航点获取总距离和时间
- angular - 解析器与 Redux
- c# - CefSharp : 根据文本框在页面上的位置向上滚动页面 (CefSharp.WinForms.ChromiumWebBrowser)
- php - 如何计算每个集群的变异系数值?- PHP MYSQL
- salt-stack - 处理 saltstack 中状态文件和支柱文件的相对路径