« 檢索フレーズにコメント(05/05/07) | Main | 檢索ワード/フレーズ(05/05/09~05/05/13) »

May 14, 2005

word-sort-on-line

檢索ワード/フレーズのユニーク化をする際に、こんなコマンドがあったら便利かな~って氣がしたので作ってみました。

(defun word-sort-on-line ()
  (interactive)
  (save-excursion
    (let* ((start (line-beginning-position))
	   (end (line-end-position))
	   (string (buffer-substring start end)))
      (delete-region start end)
      (insert (mapconcat 'concat
			 (sort (split-string string " ")
			       'string-lessp)
			 " ")))))

このコマンドの處理につゐて、みなさんが大好きな「プログラム仕樣書」を書くと・・・こんな具合になるのでしょうね(笑)。

關數名	: word-sort-on-line
機能     : 行中の語句をソートする
種別     : Emacs-Lisp コマンド
引數     : なし
戻り値   : nil
處理詳細 : 以下の通り
1. 編集セッションから脱線する。
2. ローカル變數を初期化する。
 (1) start に行頭のポヰントを設定する。
 (2) end に行末のポヰントを設定する。
 (3) string に start から end の間にある文字列を設定する。
3. start から end の間の文字列を削除する。
4. string をワード毎に分割しリスト化する。
5. リストをソートする。
6. リストの要素をスペースで區切って文字列にする。
7. 文字列をカレントバッファに插入する。
8. 脱線から復歸する。

さて、この「プログラム仕樣書」から、さっきのプログラムを作り出せるのでしょうかね・・・きっと全く違う、凄く非效率なロジックになりそうな氣がします。英語で書けば、もう少しプログラムに近ゐ書き方が出來るかもしれません。

(defun word-sort-on-line2 ()
  (interactive)
  (save-excursion
    (let* ((start (line-beginning-position))
	   (end (line-end-position))
	   (string (buffer-substring start end))
	   (word-list (split-string string " "))
	   (sort-list (sort word-list 'string-lessp))
	   (output-string (mapconcat 'concat sort-list " ")))
      (delete-region start end)
      (insert output-string))))

きっとこんな感じになるのでしょうね。なぜかこっちの方が處理がすっきりしてゐたりして・・・じゃあ、最初のプログラムはどう考ゑて作ったのか・・・そんなもの説明できません(笑)。

|

« 檢索フレーズにコメント(05/05/07) | Main | 檢索ワード/フレーズ(05/05/09~05/05/13) »

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/74224/4116822

Listed below are links to weblogs that reference word-sort-on-line:

« 檢索フレーズにコメント(05/05/07) | Main | 檢索ワード/フレーズ(05/05/09~05/05/13) »