【发布时间】:2019-09-18 04:14:54
【问题描述】:
我有以下语法表示 Haskell 中的简单类型 lambda 演算 (STLC)。我在文献中看到了很多关于如何生成随机 lambda 项的论文,但想知道 Haskell 中是否有任何库可以从下面的语法生成随机实例?我有兴趣只生成一次程序。
我看到了一个名为 QuickCheck 的库,但它可以用于此目的吗?
data Vtype = Tint
| Tbool
| Tfun Vtype Vtype
deriving (Eq, Data)
data Expr = Vi Int
| Vb Bool
| Vv Name
| App Expr Expr
| Lam Vtype Name Expr
deriving (Eq, Data)
我的第二个问题是,我知道有许多可用于 Java 和 Python 等语言的基准测试,但我尝试为 lambda 演算寻找类似的东西,但找不到任何东西。有没有针对 STLC 或无类型 lambda 演算的机会基准?
【问题讨论】:
-
是的,有用于此目的的库hackage.haskell.org/package/generic-random 不过,您可能需要先学习如何使用 QuickCheck 或其他一些随机库。
-
你想只生成类型良好的术语,还是垃圾也可以?
-
理想的类型良好的术语,但即使不是,我也可以使用任何随机术语,然后用我的类型检查器过滤它们
-
您可以使用fair backtracking monad 进行操作。几年前我写了一个blog post。
-
并不是说他的语言包含
Lam,一个绑定结构。
标签: haskell lambda-calculus quickcheck