3

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

任何帮助表示赞赏,感谢您的时间。

4

1 回答 1

10

如果我理解正确,不同Char的 s 应该出现在同一个位置吗?

那么我认为一个直截了当的定义是:

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   
于 2012-11-14T13:45:42.063 回答