List Haskell:如何将值从一个函数传递到另一个函数

List Haskell:如何将值从一个函数传递到另一个函数,list,loops,haskell,replace,List,Loops,Haskell,Replace,我有一个函数“one”,它创建一个长度为I的字符串 fillWithEmpty :: Int -> String fillWithEmpty i = if i == 0 then "." else "." ++ fillWithEmpty(i - 1) 然后,我希望系统记住长度I,这样它就可以在长度I的字符串中的某个位置用“S”替换字符串中的一个字符,给定需要替换的位置的值,e replaceWithS :: String -> Int

我有一个函数“one”,它创建一个长度为I的字符串

fillWithEmpty :: Int -> String
fillWithEmpty i =
  if i == 0 then "." else "." ++ fillWithEmpty(i - 1)
然后,我希望系统记住长度I,这样它就可以在长度I的字符串中的某个位置用“S”替换字符串中的一个字符,给定需要替换的位置的值,e

replaceWithS :: String -> Int -> String
replaceWithS i e=
  if i == e then "S" else "." ++ replaceWithS(i - 1)

任何帮助都将不胜感激。谢谢

您可以使用显式递归对列表进行枚举。每次进行递减索引的调用时,如果索引为
0
,则使用
S
,而不是给定字符串的值,因此:

replaceWithS :: String -> Int -> String
replaceWithS "" _ = ""
replaceWithS (_:xs) 0 = … : …
replaceWithS (x:xs) i = … : replaceWithS … …
replaceWithS::String->Int->String
替换为“”
replaceWith(:xs)0=…:…
replaceWith(x:xs)i=…:replaceWith…

因此,
x
是字符串的开头(它的第一个字符),而
xs
是一个包含其余字符的列表。您仍然需要在此处填写
部分。

相对于
fillWIthEmpty
返回,何时调用
replaceWithS
,即,您需要记住将哪个值传递给
fillWIthEmpty
?举例说明如何使用这两个函数会有所帮助。感谢您的注释,fillWithEmpty将首先被调用,因为我的字符串必须以句点开头(句点数量“.”由数字输入设置)。然后,当输入一个单独的数字时,将给出字母的位置,在这种情况下,S将被插入。我还没有完成代码,所以我没有一个主函数,但它有点像函数52,它将运行长度为5的fillWithEmpty,然后在位置2处运行replaceWith您的replaceWith类型签名看起来是错误的。您正在比较i和e,但一个是整数,一个是字符串。对replaceWith的递归调用只有一个参数。请修正你的问题。