2015-04-05 43 views
0

當我在where子句中使用排序方法時,出現「錯誤 - C堆棧溢出」錯誤。但是,如果我分別調用排序功能(排序「aString」)它的作品。 有什麼建議嗎?Haskell排序字符串中的「錯誤 - C堆棧溢出」

function :: String->String->Bool   
function w1 w2 
    |w1==w2  = True 
    |otherwise = False 
    where (w1,w2) = (sort w1,sort w2) 
+0

哪裏'sort'從何而來?請編輯您的問題並添加所有相關的導入。 – Jubobs 2015-04-05 02:15:24

+0

排序是我創建的一個功能...它自己工作... 排序「bca」返回 abc – DiVeRsi0n 2015-04-05 02:16:40

+1

您應該包括'sort'的定義,尤其是如果它是您的自定義函數。 – Jubobs 2015-04-05 02:18:05

回答

4
where (w1,w2) = (sort w1,sort w2) 

這個定義是無限遞歸(w1 = sort w1 = sort (sort w1) = ...)。如果您想在您的定義中引用w1w2的舊綁定,則需要爲新綁定提供不同的名稱(然後在引用新值時使用這些新名稱)。

事情是這樣的:

function :: String->String->Bool   
function w1 w2 
    |sortedW1 == sortedW2 = True 
    |otherwise = False 
    where (sortedW1, sortedW2) = (sort w1,sort w2) 

當然只是或者:

function :: String->String->Bool   
function w1 w2 
    |sort w1 == sort w2 = True 
    |otherwise = False 

甚至:

function :: String -> String -> Bool   
function w1 w2 = sort w1 == sort w2