Haskell中子字符串替换的问题

时间:2013-11-27 23:34:35

标签: haskell

我遇到了一个奇怪的问题,一个用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的相对通知,我不知道为什么会发生这种情况,并且会理解为什么会发生这种情况的任何输入。

1 个答案:

答案 0 :(得分:3)

我在GHCi中运行了代码并且工作得很好。也许是WinHugs中的一个错误?

你应该考虑转向GHC。 WinHugs几年没有更新。

相关问题