我对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:错误:变量不在范围内:加上 失败,模块加载:无。“,所以我无法尝试显然调用该函数。
答案 0 :(得分:4)
引号只是字符串文字语法的一部分,而不是其内容。也就是说,如果你写op == "plus"
,如果(且仅当)plus
包含字符' p',' l',&# 39; U'并且' s' (显然,按顺序) - 它不要求(或允许)op
包含任何引号。
因此,如果op == "plus"
即使您认为应该为True
生成op
,t.done_dt = DATEADD(month, -1, GETDATE()))
也不会包含您的想法。