Проверьте, есть ли в номере цифры в порядке
Я пытаюсь проверить, если, учитывая любое число, его цифры в порядке. Пример:
1479 -> ИСТИНА
1293 -> ЛОЖЬ
Есть ли правильный способ сделать это в Haskell? Я новичок в языке и чувствую себя действительно потерянным в данный момент. Спасибо.
3 ответа
Решение
Моя идея заключается в следующем:
`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
Вы можете преобразовать его в String и использовать простую рекурсию и сопоставление с образцом.
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)