检查数字是否按顺序排列
Check if number has its digits in order
我正在尝试检查给定任何数字,其数字是否有序。示例:
1479 -> 真
1293 -> 错误
在 Haskell 中是否有正确的方法来做到这一点?我是这门语言的新手,此刻真的很迷茫。谢谢。
我的想法是这样的:
ordenado n
| mod n 10 > mod (div n 10) 10 = ordenado (div n 10)
| n == 0 = True
| otherwise = False
我认为@vps 方法足够合适,但为了某些变化,您也可以按以下方式完成工作;
Prelude> and $ zipWith (<) <*> tail $ show 1479
True
Prelude> and $ zipWith (<) <*> tail $ show 1293
False
您可以将其转换为字符串并使用简单的递归和模式匹配。
checkInOrder :: Int -> Bool
checkInOrder x = isInOrder $ show x
isInOrder :: (Ord a) => [a] -> Bool
isInOrder [] = True
isInOrder [x] = True
isInOrder (x:y:xs) = (x < y) && (isInOrder (y:xs))
main = print (checkInOrder 1234)
我正在尝试检查给定任何数字,其数字是否有序。示例:
1479 -> 真
1293 -> 错误
在 Haskell 中是否有正确的方法来做到这一点?我是这门语言的新手,此刻真的很迷茫。谢谢。
我的想法是这样的:
ordenado n
| mod n 10 > mod (div n 10) 10 = ordenado (div n 10)
| n == 0 = True
| otherwise = False
我认为@vps 方法足够合适,但为了某些变化,您也可以按以下方式完成工作;
Prelude> and $ zipWith (<) <*> tail $ show 1479
True
Prelude> and $ zipWith (<) <*> tail $ show 1293
False
您可以将其转换为字符串并使用简单的递归和模式匹配。
checkInOrder :: Int -> Bool
checkInOrder x = isInOrder $ show x
isInOrder :: (Ord a) => [a] -> Bool
isInOrder [] = True
isInOrder [x] = True
isInOrder (x:y:xs) = (x < y) && (isInOrder (y:xs))
main = print (checkInOrder 1234)