繁体   English   中英

Haskell:测试列表长度是否小于4

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM