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