1

私はこのようにやっています:

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

そのような回避策のように感じない方法はありますか?

4

2 に答える 2

3
atom_is_lower(N) :-
    atom_chars(N, [L]),
    char_type(L, lower).
  • atom_charsはアトムを文字のリストに変換します。
  • char_typeは、文字のタイプをチェックします。

2 番目の部分 (char_type) が必要であることに注意してください。これは、1 文字のアトムが数値になる可能性があるためです (たとえば)。

于 2011-03-31T07:16:38.040 に答える
0

1 つのオプションは、ビルトインを使用することchar_type/2です。型エラーが発生した場合 (たとえば、入力が 1 つのシンボルよりも長い場合)、例外がスローされた場合は、例外を失敗に変換します。

atom_is_lower(Atom) :-
    catch(char_type(Atom, lower), _, fail).

このソリューションでは、小文字も生成できます。

?- atom_is_lower(A).
A = a ;
A = b ;
A = c ;
A = d ;
A = e ;
...
于 2011-03-31T11:02:04.197 に答える