- 192 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 12:11:19 ]
- buffer中で使った単語をリストアップするlispを書いてます。(想定する用途は、coding中にtypoした単語がないかチェックする)
単語とその出現回数のAssociationListを作って、新規に作ったbufferにinsertするようにしました。 できないのがありまして、 アルファベット順にsortするのが上手くできないです。(出現回数の方も同様にオプションでsortするようにしたいけど、後回しになってます) (sort (mapcar '(lambda (x) (car x)) word-alist) 'string-lessp) とsortしたら、sort対象のcar部分だけでなく、元のリストがsortされて、値がもどってくるにはどうしたらいいのでしょう? (defun my-list-words () (interactive) (save-excursion (goto-char (point-min)) (let (word word-alist cu-word) (while (re-search-forward "[-_a-zA-Z]+" nil t) (setq word (buffer-substring (match-beginning 0) (match-end 0))) (if (assoc word word-alist) (setcdr (assoc word word-alist) (1+ (cdr (assoc word word-alist)))) (setq word-alist (cons (cons word 1) word-alist)))) ;;;この下のS式が、上手く表現できない (setq word-alist (sort (mapcar '(lambda (x) (car x)) word-alist) 'string-lessp)) (pop-to-buffer "*words list*") (erase-buffer) (mapc '(lambda (x) (insert (format "%s\n" x))) word-alist) ))) 他の点でもアドバイスがあれば、お願いします。
|

|