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