2017-04-14 26 views
0

我是哈斯克爾的新手,今天我試圖用Haskell製作一個計算器(就像大多數人在學習一門新語言來獲取if語句時所做的一樣),而我在使用字符串值時遇到問題。我想檢查用戶寫的字符串是否爲「加號」(不帶「」),但如果我沒有引號(因此看起來像if op == plus),它不會將其識別爲字符串並輸出錯誤但如果另一方面我使用引號(所以它看起來像這樣的if op == "plus"),那麼它會用引號查找字符串「plus」,我怎樣才能將一個字符串與不帶引號的值進行比較?如何比較字符串與價值不帶引號

情況1:

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

結果:在調用函數時,因此,如果當調用該函數是例如「1加3」的輸入,它會給出一個錯誤的程序尋找「加」的「:67:13:錯誤:變量不在範圍內:加:: [字符]

案例2:

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

結果:當試圖加載程序出現錯誤「test.hs :2:33:錯誤:變量不在範圍:加 失敗,模塊加載:無。「,所以我不能嘗試顯然調用該函數。

+2

請分享[mcve]。 – bereal

+0

除了@貝瑞爾的筆記,歡迎使用堆棧溢出!我知道你已經參加了[巡演]了,所以我只會將你鏈接到[幫助],並且還會鏈接到[問]上的文章。 – Delioth

+0

@bereal將其添加到帖子 Delioth非常感謝您的幫助和善良的態度,我一定會讀它 – OreOS

回答

4

引號只是字符串文本的一部分,而不是它們的內容。也就是說,如果你寫op == "plus",如果(且僅當)plus包含字符'p','l','u'和's'(顯然是這樣的順序),這將是真的 - 它不需要或允許)op包含任何引號。

所以如果op == "plus"不會產生True適合你,即使你認爲它應該,op不包含你所想象的那樣。

+0

我認爲我們之間存在誤會,首先我建議你看看我新添加的例子,也許它會清除一些事情。其次,讓我嘗試重新解釋自己,我的意思是我的目標是檢查字符串「op」是否等於「plus」(不帶引號,因此它會是「plus」),但在使用'op ==「plus」'把字符串當作'「plus」'而不是'plus' – OreOS

+2

@OreOS'我的目標是檢查字符串'op'是否等於「plus」(不帶引號,因此它'd be plus)'這正是'op ==「加上''所做的。 '當使用op ==「加號」時,它將字符串作爲「加號」而不是加號「這不是真的。 – sepp2k

+1

@OreOS:上述內容的概念證明:https://repl.it/HJwb – bereal