字符串只有一个字符

时间:2012-11-14 13:37:41

标签: string haskell

所以,我对Haskell(以及一般的编程)都是新手,我一直试图解决问题。我想创建一个函数,它有一个输入2个字母数字(类型字符串),只有两个字母数字长度相同且只有1个不同的字符时才返回True。所以,例如,如果输入是块和黑色,我会得到True,但如果输入是黑色和刹车,我会得到假。我尝试用递归来做这件事,但我失败了。我需要这个函数,因为我想用它来检查我正在处理的程序中的一些输入。

感谢您的帮助,感谢您的帮助。

1 个答案:

答案 0 :(得分:10)

如果我理解你的话,不同的Char应该出现在同一个位置上?

然后我认为一个直截了当的定义是:

oneDifferent xs ys = 
   length xs == length ys && 
   1 == length (filter (==False) (zipWith (==) xs ys))

......或......

oneDifferent xs ys = 
  length xs == length ys &&  
  1 == foldr ((+) . fromEnum) 0 (zipWith (/=) xs ys) where

递归解决方案是

oneDifferent (x:xs) (y:ys) 
  | x /= y = xs == ys
  | otherwise = oneDifferent xs ys 
oneDifferent _ _ = False