我正在尝试使用Haskell中的定义来打印教堂数: 0 := λfx.x 1 := λfx.f x Haskell代码: c0 = \f x -> x c1 = \f x -> f x 当我在Haskell控制台中输入它时,会出现一个错误提示: test&g...
让这些数据类型分别代表一元和二进制自然数: data UNat = Succ UNat | Zero data BNat = One BNat | Zero BNat | End u0 = Zero u1 = Succ Zero u2 = Succ (Succ Zero) u3 = Suc...
我正在尝试使用固定点组合器在lambda演算中定义一个数据结构stack,并定义两个操作:元素的插入和移除,即push和pop,但我只能成功定义插入,而移除我无法理解如何定义。 以下是我的push操作和stack定义方法: Stack definition: STACK = \y.\x.(...
我在Haskell编程中的冒险并不都是史诗级的。我正在实现简单的Lambda演算,很高兴已经完成了Syntax、Evaluation以及Substitution,希望它们是正确的。剩下的就是typing,如下图红框所示,我正在寻求指导。 标题 如果我错了,请纠正我, (1) 但我收集...
通过高阶函数在无类型的λ演算中可以对各种类型进行编码。 Examples: zero = λfx. x one = λfx. fx two = λfx. f(fx) three = λfx. f(f(fx)) etc true = λtf. t false...
(这个问题是这个的跟进,当时我在学习Haskell。) 我曾经对“变量”和“值”的概念感到困惑。因此,我阅读了lambda演算的维基页面以及上面的先前答案。我得出以下解释。 请问这些是否正确?只是想再次确认,因为这些概念对于函数式编程来说相当基础但又必要。欢迎任何建议。 维基的前提: ...
堆栈!在现代 Haskell 中是否可能定义 Omega 组合子(λx.xx)?我认为,Haskell98 的类型系统是设计成使这样的事情不可能的,但现代扩展呢?
我正在寻找将一个简单的Haskell程序(没有导入的库,只有数据类型和纯函数)转换为无类型lambda演算符的方法。一种有前途的方法似乎是使用GHC API将程序编译成GHC core,然后将其转换为无类型lambda演算符。 如何使用GHC API加载Haskell程序并将其编译为Core?
我对此很感兴趣,但没有在一个地方找到相应术语的列表: Map <-> Morphism(映射 <-> 同态) Foldable <-> Catamorphism(可折叠的 <-> 余代数) ... 谁能补充这个术语列表呢?
可以在Haskell中解释λ演算: data Expr = Var String | Lam String Expr | App Expr Expr data Value a = V a | F (Value a -> Value a) interpret :: [(String,...