给定术语的以下定义:
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]|
Var
将String
转换为代表给定名称的变量的Term
。
但是Lamda
[sic]并没有将Term
作为它的第一个参数,而是使用了只有适当变量名称的空String
。所以无论你在哪里写
Lamda (Var foo) bar
你应该简单地写
Lamda foo bar
相反。这会让你遇到下一个问题(还有几个问题(;祝你好运