[英]Haskell: test if list length < 4
我有以下haskell函数,如果String
小于4个字符,则返回Nothing
:
stringToMove :: String -> Maybe Move
stringToMove [] = Nothing
stringToMove [a] = Nothing
stringToMove [a, b] = Nothing
stringToMove [a, b, c] = Nothing
stringToMove (l1:n1:l2:n2:rest) = Just (stringToCoords l1 n1, stringToCoords l2 n2)
我可以对length string
测试,但据我所读,这不是编写此代码的haskell方法,因为如果String
很长,则将对所有String
进行求值。
是否有一种优雅的书写方式,而不必在每行中重复Nothing
?
stringToMove :: String -> Maybe Move
stringToMove (l1:n1:l2:n2:rest) = Just (stringToCoords l1 n1, stringToCoords l2 n2)
stringToMove _ = Nothing
我只是想插话,如果您有很多这样的检查并且想返回Maybe
,则可以使用do
表示法:
stringToMove :: String -> Maybe Move
stringToMove s = do
l1:n1:l2:n2:_ <- return s
return (stringToCoords l1 n1, stringToCoords l2 n2)
您可以根据需要执行多次失败的绑定,如果绑定失败,该函数将返回Nothing
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.