繁体   English   中英

检查自由变量

[英]Check For Free Variables

解析错误目前是我最不喜欢的 Haskell 错误类型。 所以我写一个函数在那里我得到对的列表,其中第二部分包含一些变量(这是由确定的vars ,我以前在我的代码定义为vars :: a -> [String] 。如果列表是空的那么没有任何自由变量,替换被认为是解决的。

我已完成此操作,但parse error on '|'出现parse error on '|'

solved :: Subst a -> Bool
solved xs = null [(S(xs,d) | (S(xs,d)) <- xs, not (null (vars d)))]

我之前将我的数据类型定义为

data Subst a = S [(String,a)]

我鄙视解析错误,因为找出问题所在需要很长时间(笑)。 任何人的想法?

solved xs = null [(S(xs,d) | (S(xs,d)) <- xs, not (null (vars d)))]
                         ^^

缺少一个右括号。

但是,看起来你还有更多的问题,

data Subst a = S [(String,a)]

solved :: Subst a -> Bool
solved xs = null [(S(xs,d) | (S(xs,d)) <- xs, not (null (vars d)))]

xs不是pattern <- xs的列表,而是Subst a 此外,您还隐藏了名称xs ,这使得代码难以理解。 你可能想要类似的东西

solved (S xs) = null [ () | (varname, d) <- xs, not (null $ vars d) ]

您收到解析错误,因为| 在一对括号内 - 它需要直接在列表推导式的方括号内才能在语法上有效。

修复该问题后,您将收到类型错误,因为您的类型签名表明您的函数采用Subst a ,但您将参数Subst a列表。

我还怀疑您的vars函数会遇到问题,因为实际上不可能存在类型为a -> [String]的合理函数(这里所说的“合理”是指不只是返回相同列表的函数)每个参数的字符串)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM