2011-03-31 30 views
1

我做這樣的:檢查該原子是一個小寫字母

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

是否有感覺並不像這樣的workaroud的方法嗎?

回答

3
atom_is_lower(N) :- 
    atom_chars(N, [L]), 
    char_type(L, lower). 

請注意,第二部分(char_type)是必需的,因爲單字符原子可以是數字(例如)。

+1

鏈接似乎被打破:( – Joe 2013-05-14 09:34:31

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 ; 
... 
相關問題