Одним из вариантов является использование встроенного char_type/2
, и если он сталкивается с ошибкой типа (например, когда длина ввода превышает один символ) и выдает исключение, то преобразует исключение в сбой.
atom_is_lower(Atom) :-
catch(char_type(Atom, lower), _, fail).
Это решение также может генерировать строчные буквы:
?- atom_is_lower(A).
A = a ;
A = b ;
A = c ;
A = d ;
A = e ;
...