Проверьте, есть ли в номере цифры в порядке

Я пытаюсь проверить, если, учитывая любое число, его цифры в порядке. Пример:

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) 
Другие вопросы по тегам