2
Q
用大寫字母分詞
A
回答
3
如果您使用的是原子vs字符串(即char代碼列表),那麼這些代碼是相當不同的,因爲這些代表是關於真正不同的數據類型的。
總之,使輸入的副本
- 當前字,初始化爲空
- 累加器保持的話見過這麼遠
然後決定如何處理空白,等...
爲了保持簡單,讓我們看看最習慣的方式:字符列表
% words_to_lowercase(String, Word, WordsSeen, Result)
%
words_to_lowercase([C|Cs], WordR, Words, Result) :-
( code_type(C, upper(L))
-> reverse(WordR, Word),
WordsUpdated = [Word|Words],
Updated = [L]
; Updated = [C|WordR],
WordsUpdated = Words
),
words_to_lowercase(Cs, Updated, WordsUpdated, Result).
words_to_lowercase([], W, Seen, Result) :-
reverse([W|Seen], Result).
能產生
?- words_to_lowercase("EatAppleGood",[],[],R), maplist(atom_codes,L,R).
R = [[], [101, 97, 116], [97, 112, 112, 108, 101], [100, 111, 111, 103]],
L = ['', eat, apple, doog].
你可以在開始擺脫空字(例如)將在基本情況下,模式匹配:
words_to_lowercase([], W, Seen, Result) :-
reverse([W|Seen], [[]|Result]).
編輯:哎呀,我忘了扭轉最後一個字...
words_to_lowercase([], W, Seen, Result) :-
reverse(W, R),
reverse([R|Seen], [[]|Result]).
編輯關於正則表達式的建議,你從Najzero得到了評論,你可以很好地利用最近發佈的regex包。先從
?- pack_install(regex).
然後
?- [library(regex)].
?- regex('([A-Z][a-z]+)+', [], 'EatAppleGood', L),maplist(atom_codes,A,L).
L = [[69, 97, 116], [65, 112, 112, 108, 101], [71, 111, 111, 100]],
A = ['Eat', 'Apple', 'Good'].
,因爲我們有準備downcase_atom,我們可以做
?- regex('([A-Z][a-z]+)+', [], 'EatAppleGood', L),maplist(atom_codes,A,L),maplist(downcase_atom,A,D).
L = [[69, 97, 116], [65, 112, 112, 108, 101], [71, 111, 111, 100]],
A = ['Eat', 'Apple', 'Good'],
D = [eat, apple, good].
相關問題
- 1. 用大寫字母分隔連接詞
- 2. 經常用於分離由大寫字母單詞和數字
- 3. 烏克蘭字母RegEx。如何用大寫字母分隔西里爾詞彙?
- 4. 用大寫字母拆分字符串
- 5. 用大寫字母拆分字符串
- 6. 以大寫字母刪除單詞
- 7. 用大寫字母
- 8. Swift大寫字母中每個單詞的第一個字母
- 9. Titanium - TextField鍵盤類型爲單詞首字母大寫字母
- 10. 大寫每個大寫單詞的第一個字母
- 11. 以大寫字母拆分字符串
- 12. 拆分大寫字母和數字
- 13. 用大寫字母替換「 - 」字母
- 14. 大寫字母和小寫字母
- 15. 大寫字母的第一個單詞(或者可選的所有單詞)的大寫字母2+
- 16. 使用javascript大寫首字母大寫
- 17. 用小寫字母寫成小寫字母大寫
- 18. 大寫字母,小寫字母,大寫的Ant屬性
- 19. X86 NASM將大寫字母轉換爲大寫字母和小寫字母
- 20. php大寫字母大寫字
- 21. Prolog,使用大寫字母
- 22. 連續用大寫字母
- 23. 用大寫字母粘貼
- 24. 按大寫字母拆分字符串(不包括帶連字符的單詞)
- 25. 首字母大寫的字符串首字母大寫
- 26. 首字母大寫
- 27. 以大寫字母
- 28. 大寫首字母
- 29. 使用增強庫大寫句子中每個單詞的首字母大寫
- 30. 如何分割兩個大寫字母?
有一拍:使用這個表達式http://jason.diamond.name/weblog/2009/08/15/split-camelcase-with-regular-expressions /並將其轉換爲序言 – Najzero