当我在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)
答案 0 :(得分:4)
where (w1,w2) = (sort w1,sort w2)
这个定义是无限递归的(w1 = sort w1 = sort (sort w1) = ...
)。如果要在定义中引用w1
和w2
的旧绑定,则需要为新绑定指定不同的名称(然后在引用新值时使用这些新名称)。 / 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