我知道如何检查字符串是否包含这样的特定字符:
charFound :: Char -> String -> Bool
charFound c s = c `elem` s
现在,我怎样才能使用递归相同的方法?
另外,使用模式匹配来检查其中一个参数是否为空,我正在
解析错误在模式中:' ' s
charFound:: Char->String->Bool
charFound '' s = error "Something is empty." -- ERROR
charFound c "" = error "Something is empty." -- OK
我是否可以使用_
来忽略某个不属于列表的参数?
更新目前代码
charFound :: Char->String->Bool
charFound c (x:xs)
| c == x = True
| xs == "" = False
| otherwise = contido c xs
另外
charFound :: Char->String->Bool
charFound _ "" = False -- returns false if I type > charFound 'a' "Leh"
charFound c (x:xs)
| c == x = True
| otherwise = contido c xs
答案 0 :(得分:4)
我们可以保持相同的签名,因为该功能可以做同样的事情。
class giraffemousehandler extends MouseAdapter implements MouseListener, MouseMotionListener { //MouseAdapter makes it so that you don't have to have all 7 implemented mouse listener methods
@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
status.setBounds(e.getX(), e.getY(), 50, 60); //Makes JLabel follow mouse
}
@Override
public void mouseEntered(MouseEvent e) {
status.setText("Entered");
}
@Override
public void mouseExited(MouseEvent e) {
status.setText("exited");
// status.setBounds(e.getX(), e.getY(), 5, 6);
}
}
}
当你执行递归时,你总是想确保你考虑你的基本情况,在这种情况下,当你在空字符串中寻找一个字符时,显然总是返回false。
charFound :: Char -> String -> Bool
现在你必须考虑另一种情况,即String不为空。如果字符串不为空,则其形式为charFound c "" = False
,如果x等于我们的字符,则返回true,否则我们检查c是否在xs中。
(x:xs)
可替换地,
charFound c (x:xs)
| c == x = True
| otherwise = charFound c xs
编辑:
要回答有关模式匹配的其他问题,您会收到该警告,因为charFound c (x:xs) = c == x || charFound c xs
不是字符!角色永远不会是空的,所以你不需要考虑这种可能性。
此外,您绝对可以使用''
来匹配不是列表的内容。您可以使用_
来匹配您喜欢的任何参数。例如,基本案例可以写成
_
因为当String为空时我们实际上不需要知道字符的值是什么,所以我们不需要给它起一个名字。