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