String 如何将字符串与不带引号的值进行比较

String 如何将字符串与不带引号的值进行比较,string,haskell,if-statement,String,Haskell,If Statement,我是Haskell的新手,今天我试图用Haskell制作一个计算器(就像大多数人在学习一门新语言以掌握if语句时所做的那样),但在使用带字符串的if值时遇到了麻烦。我想检查用户编写的字符串是否为“plus”(不带“”),但如果我没有使用引号(因此它看起来像如果op==plus),它不会将其识别为字符串并输出错误,但如果另一方面我使用引号(如果op==“plus”,它看起来像这样),那么它会查找字符串“plus”使用引号,如何将字符串与没有引号的值进行比较 案例1: calculate x op

我是Haskell的新手,今天我试图用Haskell制作一个计算器(就像大多数人在学习一门新语言以掌握if语句时所做的那样),但在使用带字符串的if值时遇到了麻烦。我想检查用户编写的字符串是否为“plus”(不带“”),但如果我没有使用引号(因此它看起来像
如果op==plus
),它不会将其识别为字符串并输出错误,但如果另一方面我使用引号(如果op==“plus”,它看起来像这样),那么它会查找字符串“plus”使用引号,如何将字符串与没有引号的值进行比较

案例1:

calculate x op y = do
            if op == "plus"
                        then x+y
                        else x
结果:程序在调用函数时查找“加号”,因此,如果调用函数时的输入为例如“1加3”,则会发出错误:67:13:error:Variable不在作用域中:加号:[Char]

案例2:

calculate x op y = do
            if op == plus
                        then x+y
                        else x
结果:当尝试加载程序时,我得到错误“test.hs:2:33:error:Variable not in scope:plus
失败,模块已加载:无。“,因此我显然无法尝试调用该函数。

引号只是字符串文本语法的一部分,而不是其内容。也就是说,如果您编写
op==“plus”
,如果(并且仅当)
plus
包含字符“p”、“l”、“u”和“s”(显然按该顺序)时,这将是正确的-它不要求(或允许)
op
包含任何引号


因此,如果
op==“plus”
即使在您认为应该的时候也不能为您生成
True
op
也不包含您认为的内容。

引号只是字符串文本语法的一部分,而不是其内容。也就是说,如果您编写
op==“plus”
,如果(并且仅当)
plus
包含字符“p”、“l”、“u”和“s”(显然按该顺序)时,这将是正确的-它不要求(或允许)
op
包含任何引号


因此,如果
op==“plus”
即使在您认为应该的时候也不能为您生成
True
op
也不包含您认为的内容。

请分享。除了@bereal的注释,欢迎使用堆栈溢出!我知道你已经接受了,所以我只会把你链接到,也链接到文章上。@贝雷尔把它添加到了帖子里。非常感谢你的帮助和亲切的态度,我会在查看你的问题的来源后,确保阅读它的重要注意事项:不要在Haskell代码中使用标签。关于这件事的讨论,请参阅。@duplode哦,上帝<代码>↦不适合上的等距字体FF@Win. 为什么没有人编辑我的答案?请分享。除了@bereal的便条,欢迎来到Stack Overflow!我知道你已经接受了,所以我将把你链接到,以及上的文章。@bereal将它添加到了post Delioth中。非常感谢你的帮助和友好的态度,我会确保在查看你问题的来源后阅读它的重要说明:不要在Haskell代码中使用制表符。关于这件事的讨论,请参阅。@duplode哦,上帝<代码>↦不适合上的等距字体FF@Win. 为什么没有人编辑我的答案?我想我们之间有一个误解,首先我建议你看看我新增的例子,也许它会澄清问题。第二,让我重新解释一下,我的意思是,我的目标是检查字符串“op”是否等于“plus”(没有引号,因此它应该是
plus
),但当使用
op==“plus”
时,它将字符串作为
plus
而不是
plus
@OreOS'我的目标是检查字符串'op'是否等于“plus”(不带引号,所以应该是plus)'这正是
op==“plus”
的作用当使用op==“plus”时,它将字符串视为“plus”而不是“plus”,这是不正确的。感谢所有帮助过我的人,@bereal你的例子让我意识到我认为是什么原因。我认为当在ghci中将其作为函数的参数运行时,它是在寻找名为
plus
的变量,而不是将其作为值,当我输入
“plus”
时,它将其识别为值而不是变量名,抱歉,如果这是一个麻烦,再次感谢您的帮助。我认为我们之间存在误解,首先,我建议您看看我新添加的示例,也许这会澄清问题。第二,让我重新解释一下,我的意思是,我的目标是检查字符串“op”是否等于“plus”(没有引号,因此它应该是
plus
),但当使用
op==“plus”
时,它将字符串作为
plus
而不是
plus
@OreOS'我的目标是检查字符串'op'是否等于“plus”(不带引号,所以应该是plus)'这正是
op==“plus”
的作用当使用op==“plus”时,它将字符串视为“plus”而不是“plus”,这是不正确的。感谢所有帮助过我的人,@bereal你的例子让我意识到我认为是什么原因。我认为当在ghci中将其作为函数的参数运行时,它是在寻找名为
plus
的变量,而不是将其作为一个值,当我输入
“plus”
时,它将其识别为一个值而不是一个变量名,如果这是一个麻烦,请再次感谢您的帮助。