我这样做:
foo(N) :-
name(N, [Code]),
name(a, [CodeA]),
name(z, [CodeZ]),
CodeA =< Code,
Code =< CodeZ.
有没有一种方法不像这样的工作方式?
答案 0 :(得分:3)
atom_is_lower(N) :-
atom_chars(N, [L]),
char_type(L, lower).
请注意,第二部分(char_type)是必要的,因为单字符原子可以是数字(例如)。
答案 1 :(得分:0)
一种选择是使用内置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 ;
...