如何将字符串与值进行比较而不使用引号

时间:2017-04-14 18:20:06

标签: string haskell if-statement

我对Haskell很新,今天我正在尝试使用Haskell编写一个计算器(就像大多数人在学习一门新语言时所做的那样来获取if语句)并且我在使用带有字符串的值时遇到了麻烦。我想检查用户写的字符串是否为“plus”(不带“”)但是如果我没有引号(所以它看起来像if op == plus)它不会将其识别为字符串并输出一个错误,但如果另一方面我使用引号(所以它看起来像这个if op == "plus")然后它用引号查找字符串“加”,我怎么能比较一个字符串没有引号的值?

案例1:

calculate x op y = do
            if op == "plus"
                        then x+y
                        else x

结果:程序在调用函数时查找“plus”,因此如果调用函数时的输入是例如“1加3”,它将发出错误':67:13:错误:变量不是范围:plus :: [Char]

案例2:

calculate x op y = do
            if op == plus
                        then x+y
                        else x

结果:当尝试加载程序时,我收到错误“test.hs:2:33:错误:变量不在范围内:加上 失败,模块加载:无。“,所以我无法尝试显然调用该函数。

1 个答案:

答案 0 :(得分:4)

引号只是字符串文字语法的一部分,而不是其内容。也就是说,如果你写op == "plus",如果(且仅当)plus包含字符' p',' l',&# 39; U'并且' s' (显然,按顺序) - 它不要求(或允许)op包含任何引号。

因此,如果op == "plus"即使您认为应该为True生成opt.done_dt = DATEADD(month, -1, GETDATE()))也不会包含您的想法。