我对Haskell很新,作为一种学习方式(第一个项目)我将代码从Tcl移植到Haskell。该项目是一种特定于域的查询语言,它通过语义层转换为SQL查询。现在,在语言的解析器中限制查询语言的运算符,在Haskell中类似的代码实际上似乎比在Tcl中更愚蠢: - )
type MatchOperator = [Char]
getOpJoiner :: MatchOperator -> String
getOpJoiner "!=" = " and "
getOpJoiner "!~" = " and "
getOpJoiner "!~~" = " and "
getOpJoiner _ = " or " -- In reality, this can only be "=", "~", "~~" or "==" according to the parser
代码执行应该做的事情(根据使用的查询运算符返回语句的相应SQL逻辑连接符),但我确信它可以变得更漂亮。
答案 0 :(得分:1)
如果您只想减少代码行,请尝试以下方法:
getOpJoiner :: MatchOperator -> String
getOpJoiner x
| x `elem` ["!=","!~","!~~"] = " and "
| otherwise = " or "
elem
用于检查输入是否与列表中的任何字符串匹配。
此功能可行。但是,我认为最好投资@bheklilr建议的解决方案,因为他提到的原因。