私はこのようにやっています:
foo(N) :-
name(N, [Code]),
name(a, [CodeA]),
name(z, [CodeZ]),
CodeA =< Code,
Code =< CodeZ.
そのような回避策のように感じない方法はありますか?
私はこのようにやっています:
foo(N) :-
name(N, [Code]),
name(a, [CodeA]),
name(z, [CodeZ]),
CodeA =< Code,
Code =< CodeZ.
そのような回避策のように感じない方法はありますか?
atom_is_lower(N) :-
atom_chars(N, [L]),
char_type(L, lower).
2 番目の部分 (char_type) が必要であることに注意してください。これは、1 文字のアトムが数値になる可能性があるためです (たとえば)。
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 ;
...