haskell - Haskell 中的 Lambda 演算 isEven 函数
问题描述
所以我正在学习 Haskell 中的 lambda 演算,并且我正在尝试实现一个 isEven 函数,如果它是偶数则返回 true,否则返回 false。我知道 0 是偶数,然后 1 是奇数,然后每个交替数是前一个的替代数,即如果一个是奇数,那么 2 是偶数,那么 3 是奇数。我可以让 isEven 函数检查输入是否为 0,如果不是,那么以某种方式检查它的后继是偶数还是奇数?
解决方案
我假设通过“lambda 演算”你的意思是我们正在使用一些 Church 编码的数字 + 布尔值,而“Haskell”部分主要是你的问题所附带的。
isEven = \n -> n flip True
flip = \x y z -> x z y
True = \x y -> x
False = \x y -> y
这与您表达它的方式略有不同。
回忆一下 Church 数字n
意味着n
迭代的函数应用。flip
重复偶数 # 次是id
,因此n flip == id
对于偶数n
,n flip == flip
对于奇数n
。还有,flip True == False
和flip False == True
。因此,该构造正确地编码了奇偶校验。
推荐阅读
- spring - 将 mongoshell 投影转换为 Spring MongoTemplate 投影
- python-3.x - subprocess.CalledProcessError: Command '['gs', '-q', ...] 返回非零退出状态 2
- sql - 将嵌套的 Json 数据解析为 SQL Server 表
- c# - 将自定义 x 轴类别添加到 c# 以编程方式创建的 excel 折线图
- sql - 如何最有效地过滤基于另一个表的 SQL 查询?
- ssis - 执行 SSIS 包时检索 COM 类工厂错误
- mongodb - 从另一个集合中获取不同的 id 列表,其中数组字段包含来自 MongoDB 中当前集合中的项目的 id
- snowflake-cloud-data-platform - 雪花:有没有不使用创建仓库的方法?
- reactive-programming - 如何使用 Rx.Net 根据观察者的执行时间来节流
- jquery - 使用动态验证模式验证“必填”字段