"错误 - C堆栈溢出"在Haskell排序字符串

时间:2015-04-05 02:10:52

标签: haskell

当我在where子句中使用sort方法时,我有一个“ERROR - C堆栈溢出”。但是如果我单独调用sort函数(排序“aString”)就可以了。 有什么建议吗?

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

1 个答案:

答案 0 :(得分:4)

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

这个定义是无限递归的(w1 = sort w1 = sort (sort w1) = ...)。如果要在定义中引用w1w2的旧绑定,则需要为新绑定指定不同的名称(然后在引用新值时使用这些新名称)。 / p>

这样的事情:

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