Haskell单词首尾衔接校验函数异常问题咨询
问题排查与解决
你遇到的异常最可能源于函数名不匹配:你定义的校验函数是validGame1,但调用时用了未定义的validGame,触发了“未找到函数”的运行时异常。而测试返回False的场景时,你大概率误使用了正确的函数名validGame1,所以能正常执行。
修复步骤
- 直接正确调用现有函数:
把字符串用words拆分后传入validGame1:validGame1 (words "bread door room mad") - 添加包装函数(更便捷):
定义一个接收字符串的函数,自动用words拆分后调用validGame1,这样就能按你原本的方式调用:
之后就可以正常执行validGame :: String -> Bool validGame = validGame1 . wordsvalidGame "bread door room mad"了。
健壮性优化
虽然words不会生成空字符串,但为了避免极端场景下last或head抛出异常,可以给validGame1增加空单词校验:
validGame1 :: [String] -> Bool validGame1 [] = True validGame1 [x] = not (null x) validGame1 (a:b:xs) | null a || null b = False | last a == head b = validGame1 (b:xs) | otherwise = False
内容的提问来源于stack exchange,提问作者Tamás Veszelyi
相关产品推荐
相关产品推荐

