具有3个字符串的函数,其中第一个是3rd的一部分,然后用第二个字符串将第3个的第一个字符串更改为

我需要编写一个Haskell函数,该函数将3个字符串作为输入,其中第一个字符串是第三个字符串的一部分,并用第二个字符串替换第一个字符串。

为此,我尝试使用递归,但是似乎我没有正确设置基本情况,并且还会收到“签名缺少伴随的绑定错误”(我对Haskell完全陌生)

change:: String -> String -> String -> String
change [] [] [] = []
change [] ys zs = ys
change xs [] zs = zs
change xs ys [] = []
change (x:xs) (y:ys) (z:zs) =  change xs ys zs

在这里编码

函数输出应为例如: 更改“你好”“再见”“你好课” “再见课”

poissonpetit 回答:具有3个字符串的函数,其中第一个是3rd的一部分,然后用第二个字符串将第3个的第一个字符串更改为

我们可以使用replace :: Text -> Text -> Text -> Text的{​​{1}}函数。

首先添加此实用说明Data.Text,您可以在此处https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/glasgow_exts.html#overloaded-string-literals阅读

然后更改功能将如下所示:

{-# LANGUAGE OverloadedStrings #-}

您可以看到我正在使用{-# LANGUAGE OverloadedStrings #-} import Data.Text ( pack,unpack,replace) change :: String -> String -> String -> String change xs ys = unpack . replace (pack xs) (pack ys) . pack pack来切换unpackText 如果您想了解更多String

,请参阅https://hackage.haskell.org/package/text-1.2.4.0/docs/Data-Text.html ,

我对Haskell还是陌生的,正如我认为的那样,您编写的代码没有错误,但是并不能如您所愿地提供期望的结果。基本上,它根据较短的字符串的长度给出输出字符串。对于您的示例,输出为“ ye class”。

该程序可以达到预期的效果,

change :: String -> String -> String -> String
change _  _    ""   =  ""

change l1 l2 (z:zs) = if l1 == take (length l1) (z:zs) then l2 ++ drop (length l1) (z:zs) else z:(change l1 l2 zs)
本文链接:https://www.f2er.com/3153207.html

大家都在问