9得票2回答
Haskell中的Church数

我正在尝试使用Haskell中的定义来打印教堂数: 0 := λfx.x 1 := λfx.f x Haskell代码: c0 = \f x -> x c1 = \f x -> f x 当我在Haskell控制台中输入它时,会出现一个错误提示: test&g...

9得票3回答
是否有高效的方法将一元数转换为二进制数?

让这些数据类型分别代表一元和二进制自然数: data UNat = Succ UNat | Zero data BNat = One BNat | Zero BNat | End u0 = Zero u1 = Succ Zero u2 = Succ (Succ Zero) u3 = Suc...

9得票2回答
在λ演算中定义堆栈数据结构及其主要操作

我正在尝试使用固定点组合器在lambda演算中定义一个数据结构stack,并定义两个操作:元素的插入和移除,即push和pop,但我只能成功定义插入,而移除我无法理解如何定义。 以下是我的push操作和stack定义方法: Stack definition: STACK = \y.\x.(...

9得票2回答
Haskell用于Lambda演算和类型推断

我在Haskell编程中的冒险并不都是史诗级的。我正在实现简单的Lambda演算,很高兴已经完成了Syntax、Evaluation以及Substitution,希望它们是正确的。剩下的就是typing,如下图红框所示,我正在寻求指导。 标题 如果我错了,请纠正我, (1) 但我收集...

9得票3回答
将高阶类型(单子!)嵌入非类型化λ演算

通过高阶函数在无类型的λ演算中可以对各种类型进行编码。 Examples: zero = λfx. x one = λfx. fx two = λfx. f(fx) three = λfx. f(f(fx)) etc true = λtf. t false...

9得票2回答
检查理解:"变量"与"值",以及"函数"与"抽象"的区别

(这个问题是这个的跟进,当时我在学习Haskell。) 我曾经对“变量”和“值”的概念感到困惑。因此,我阅读了lambda演算的维基页面以及上面的先前答案。我得出以下解释。 请问这些是否正确?只是想再次确认,因为这些概念对于函数式编程来说相当基础但又必要。欢迎任何建议。 维基的前提: ...

9得票3回答
现代 Haskell 中是否可以定义 Omega combinator(λx.xx)?

堆栈!在现代 Haskell 中是否可能定义 Omega 组合子(λx.xx)?我认为,Haskell98 的类型系统是设计成使这样的事情不可能的,但现代扩展呢?

9得票1回答
如何将Haskell编译成未类型化的lambda演算(或GHC核心)?

我正在寻找将一个简单的Haskell程序(没有导入的库,只有数据类型和纯函数)转换为无类型lambda演算符的方法。一种有前途的方法似乎是使用GHC API将程序编译成GHC core,然后将其转换为无类型lambda演算符。 如何使用GHC API加载Haskell程序并将其编译为Core?

9得票1回答
类别论中与Map、Filter、Foldable、Bind等对应的术语是什么?

我对此很感兴趣,但没有在一个地方找到相应术语的列表: Map <-> Morphism(映射 <-> 同态) Foldable <-> Catamorphism(可折叠的 <-> 余代数) ... 谁能补充这个术语列表呢?

9得票3回答
在Haskell中解释Parigot的lambda-mu演算

可以在Haskell中解释λ演算: data Expr = Var String | Lam String Expr | App Expr Expr data Value a = V a | F (Value a -> Value a) interpret :: [(String,...