bufferA: 赵钱孙李周吴郑王 bufferB: 赵周冯王将沈钱李
想知道他们的交集和差是什么: A n B, A - B , B - A
怎么做呢谢谢
bufferA: 赵钱孙李周吴郑王 bufferB: 赵周冯王将沈钱李
想知道他们的交集和差是什么: A n B, A - B , B - A
怎么做呢谢谢
(let* ((buffer-a-string (with-current-buffer "a"
(buffer-substring-no-properties (point-min) (point-max))))
(buffer-b-string (with-current-buffer "b"
(buffer-substring-no-properties (point-min) (point-max))))
(buffer-a-char-list (string-glyph-split buffer-a-string))
(buffer-b-char-list (string-glyph-split buffer-b-string)))
(message "Intersection: %s" (seq-intersection buffer-a-char-list
buffer-b-char-list)) ;; => ("赵" "周" "王" "钱" "李")
(message "Difference: %s" (seq-difference buffer-a-char-list
buffer-b-char-list)) ;; => ("孙" "吴" "郑")
(message "Difference: %s" (seq-difference buffer-b-char-list
buffer-a-char-list))) ;; => (“冯” “将” “沈”)
去重可以用 seq-uniq
emacs里对比两段汉字的问题
这个标题是求助还是分享?
之前想简单了,以为问题就不是分享,没想到有歧义,已添加求助字样
感谢高手,我先理解一下怎么用哈 不好意思太菜了,我把两个buffer分别改名为a和b,之后在scratch里贴上上面的代码,执行ctrl x ctrl e得到
Debugger entered--Lisp error: (void-function “冯”)
(“冯” “将” “沈”)
(progn (“冯” “将” “沈”))
eval((progn (“冯” “将” “沈”)) t)
elisp--eval-last-sexp(nil)
eval-last-sexp(nil)
funcall-interactively(eval-last-sexp nil)
call-interactively(eval-last-sexp nil nil)
command-execute(eval-last-sexp)
;;
后面的是注释,可以删掉
把光标放在星号处再执行 C-x C-e 即可
这个星号是后加的吗,之前贴的代码里没有,尝试在冯前面的;;前(即最后一行)加上执行也报错
Debugger entered--Lisp error: (void-variable *)
(progn *)
eval((progn *) t)
elisp--eval-last-sexp(nil)
eval-last-sexp(nil)
funcall-interactively(eval-last-sexp nil)
call-interactively(eval-last-sexp nil nil)
command-execute(eval-last-sexp)
星号只是代表光标位置,用下面代码吧
(let* ((buffer-a-string (with-current-buffer "a"
(buffer-substring-no-properties (point-min) (point-max))))
(buffer-b-string (with-current-buffer "b"
(buffer-substring-no-properties (point-min) (point-max))))
(buffer-a-char-list (string-glyph-split buffer-a-string))
(buffer-b-char-list (string-glyph-split buffer-b-string)))
(message "Intersection: %s" (seq-intersection buffer-a-char-list
buffer-b-char-list))
(message "Difference: %s" (seq-difference buffer-a-char-list
buffer-b-char-list))
(message "Difference: %s" (seq-difference buffer-b-char-list
buffer-a-char-list)))
感谢且不好意思,在新代码最后一个括号后按ctrl x ctrl e的结果
Debugger entered--Lisp error: (void-function string-glyph-split)
(string-glyph-split buffer-a-string)
(let* ((buffer-a-string (save-current-buffer (set-buffer "a") (buffer-substring-no-properties (point-min) (point-max)))) (buffer-b-string (save-current-buffer (set-buffer "b") (buffer-substring-no-properties (point-min) (point-max)))) (buffer-a-char-list (string-glyph-split buffer-a-string)) (buffer-b-char-list (string-glyph-split buffer-b-string))) (message "Intersection: %s" (seq-intersection buffer-a-char-list buffer-b-char-list)) (message "Difference: %s" (seq-difference buffer-a-char-list buffer-b-char-list)) (message "Difference: %s" (seq-difference buffer-b-char-list buffer-a-char-list)))
(progn (let* ((buffer-a-string (save-current-buffer (set-buffer "a") (buffer-substring-no-properties (point-min) (point-max)))) (buffer-b-string (save-current-buffer (set-buffer "b") (buffer-substring-no-properties (point-min) (point-max)))) (buffer-a-char-list (string-glyph-split buffer-a-string)) (buffer-b-char-list (string-glyph-split buffer-b-string))) (message "Intersection: %s" (seq-intersection buffer-a-char-list buffer-b-char-list)) (message "Difference: %s" (seq-difference buffer-a-char-list buffer-b-char-list)) (message "Difference: %s" (seq-difference buffer-b-char-list buffer-a-char-list))))
eval((progn (let* ((buffer-a-string (save-current-buffer (set-buffer "a") (buffer-substring-no-properties (point-min) (point-max)))) (buffer-b-string (save-current-buffer (set-buffer "b") (buffer-substring-no-properties (point-min) (point-max)))) (buffer-a-char-list (string-glyph-split buffer-a-string)) (buffer-b-char-list (string-glyph-split buffer-b-string))) (message "Intersection: %s" (seq-intersection buffer-a-char-list buffer-b-char-list)) (message "Difference: %s" (seq-difference buffer-a-char-list buffer-b-char-list)) (message "Difference: %s" (seq-difference buffer-b-char-list buffer-a-char-list)))) t)
elisp--eval-last-sexp(nil)
eval-last-sexp(nil)
funcall-interactively(eval-last-sexp nil)
call-interactively(eval-last-sexp nil nil)
command-execute(eval-last-sexp)
是不是因为换行的缘故,我去改一下 不是
感谢耐心回复,我就不新开层表达了
string-glyph-split
好像是 emacs 29 引入的,我不知道 28 有没有,用 split-string
吧
(let* ((buffer-a-string (with-current-buffer "a"
(buffer-substring-no-properties (point-min) (point-max))))
(buffer-b-string (with-current-buffer "b"
(buffer-substring-no-properties (point-min) (point-max))))
(buffer-a-char-list (split-string buffer-a-string "" t))
(buffer-b-char-list (split-string buffer-b-string "" t)))
(message "Intersection: %s" (seq-intersection buffer-a-char-list
buffer-b-char-list))
(message "Difference: %s" (seq-difference buffer-a-char-list
buffer-b-char-list))
(message "Difference: %s" (seq-difference buffer-b-char-list
buffer-a-char-list)))