Я пытаюсь проверить, в порядке ли данного номера его цифры.Пример:
1479 -> TRUE
1293 -> FALSE
Есть ли правильный способ сделать это в Haskell?Я плохо знаком с языком и чувствую себя действительно потерянным в данный момент.Спасибо.
Я думаю, что подход @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)
Моя идея такова:
ordenado n | mod n 10 > mod (div n 10) 10 = ordenado (div n 10) | n == 0 = True | otherwise = False