Haskell表达式来查找自由变量(Lambda Calculus)



给定术语的以下定义:

data Term = Var String | Application Term Term | Lambda String Term

如何将术语中的自由变量提取到列表中?

我正在使用这个表达式的定义:

findVariables :: Term -> [String]

到目前为止,我有以下内容:findVariables (Lamda(Var p)(Application z(Lamda(Var q)(Var r)))) = [r]

这个想法是忽略Lambda((上的变量,只取未连接的变量,但我收到了以下错误:

hw.hs:8:22-26:错误:

•无法将类型"Term"与"[Char]"匹配应为类型:字符串实际类型:期限

•在模式中:Var p我在模式中:Lamda(Var p((应用z(Lamda(Var q((Var r((

在"findVariables"的等式中:findVariables(Lamda(Var p((应用z(Lamda,Var q((Var r(((=[r]|8|findVariables(Lamda(Var p((应用程序z(Lam达(Var q((Var r(((=[r]|

VarString转换为代表给定名称的变量的Term

但是Lamda[sic]并没有将Term作为它的第一个参数,而是使用了只有适当变量名称的空String。所以无论你在哪里写

Lamda (Var foo) bar

你应该简单地写

Lamda foo bar

相反。这会让你遇到下一个问题(还有几个问题(;祝你好运

最新更新