检查原子是否是小写字母

时间:2011-03-31 07:03:12

标签: prolog swi-prolog

我这样做:

foo(N) :-
        name(N, [Code]),
        name(a, [CodeA]),
        name(z, [CodeZ]),
        CodeA =< Code,
        Code  =< CodeZ.

有没有一种方法不像这样的工作方式?

2 个答案:

答案 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 ;
...