我遇到了一个奇怪的问题,一个用Haskell编写的小函数,它意味着要通过一个字符串并用不同的单词替换其中的一个单词。当使用一个小字符串时,该函数可以工作,但是当搜索大字符串来替换单词时会发生奇怪的事情。该功能定义如下:
swapwords :: String -> String -> String -> String
swapwords w1 w2 [] = []
swapwords w1 w2 (x:xs)
| length (x:xs) < n = (x:xs)
| otherwise = do
if w1 == take n (x:xs) then w2 ++ swapwords w1 w2 (drop n (x:xs))
else x:swapwords w1 w2 xs
where n = length w1
当使用交换字“ab”“ba”“ab”运行时,输出正确“ba”,但是当输入“lamb”“buffalo”时,“玛丽有一只小羊羔,其羊毛是白色的雪”输出仍然正确地将“lamb”与“buffalo”交换,但是添加到字符串的末尾是WinHugs加载时首先显示的消息的一部分,例如“Mary有一只小水牛,其羊毛为白色,因为snown -98启用exensions
类型:?寻求帮助“
作为对Haskell的相对通知,我不知道为什么会发生这种情况,并且会理解为什么会发生这种情况的任何输入。
答案 0 :(得分:3)
我在GHCi中运行了代码并且工作得很好。也许是WinHugs中的一个错误?
你应该考虑转向GHC。 WinHugs几年没有更新。