2015-04-05 42 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