Emacs Part 54 (781レス)
Emacs Part 54 http://mevius.5ch.net/test/read.cgi/unix/1669946913/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
18: 名無しさん@お腹いっぱい。 [sage] 2022/12/10(土) 23:11:44.74 次のように引数の必要な関数を関数名のシンボルの代わりに指定するときに、 lambda式で書くとエラーになる場合はどうするのがいいんでしょうか? Wrong type argument: symbolp, #'(lambda nil (dabbrev-expand nil)) (setq smart-tab-completion-functions-alist '((emacs-lisp-mode . lisp-complete-symbol) (lisp-interaction-mode . lisp-complete-symbol) (text-mode . #'(lambda () (dabbrev-expand nil))))) # この例では実際にはこの設定は不要なんですが、 # いじっているうちに疑問が出てきたので一例として。 http://mevius.5ch.net/test/read.cgi/unix/1669946913/18
20: 18 [sage] 2022/12/11(日) 00:30:06.60 まだよく理解できていないので一部だけ補足しますが、 #'(lammda ...は(lambda ...でも一緒なのかと思ったんですが。 https://www.gnu.org/software/emacs/manual/html_node/elisp/Anonymous-Functions.html で、そもそもこんな風に書いたのは次のような書法を参考にしたんですが、 どうもここではまずいようです。 (add-hook 'text-mode-hook (lambda ... )) http://mevius.5ch.net/test/read.cgi/unix/1669946913/20
23: 18 [sage] 2022/12/11(日) 01:24:43.39 >>19 >>22 何となく引っかかっていたところがちょっとわかりかけました。 lambda式が評価せずそのまま飲み込んで関数として定義されていないことが、 関数名のシンボルを要求する文脈ではエラーになると。 ではつまり関数として定義してしまうしかないということですかね? http://mevius.5ch.net/test/read.cgi/unix/1669946913/23
25: 名無しさん@お腹いっぱい。 [sage] 2022/12/11(日) 09:13:24.81 >>23 文脈と書いたのは>>18の#'(の部分が評価されない文脈だから。なぜなら'(で囲まれてる中だからね。 #'(lambda () ...)は(function (lambda () ...)の略記だから(ここが分かってない?) '(の中ではそのまま一つ目の要素がシンボルfunctionで二つ目の要素が(lambda~のリストになってしまう。そしてそれはfuncall出来ない。例:(funcall '(function (lambda () 123))) 解決策は'(を使わずリストを組み立てることで、>>19や>>24が言うように(listやバッククォートでリストを組み立てること。シンボルだけで無く、(functionで囲まれていない)lambda(やそれを評価すると出来るclosure)も問題なく使える。 まあdefunして良いならそれでもOK。 http://mevius.5ch.net/test/read.cgi/unix/1669946913/25
26: 18 [sage] 2022/12/11(日) 13:45:15.25 >>25 中途半端にあれこれ聞いてお手間を取らせました。 まだろくにわかってないんですが、 疑問は疑問としてとりあえずこうすると動きます。 consだといいの?何だか不思議だなあ。 (setq smart-tab-completion-functions-alist '((emacs-lisp-mode . lisp-complete-symbol) (lisp-interaction-mode . lisp-complete-symbol) (cons 'text-mode (lambda () (dabbrev-expand nil))))) http://mevius.5ch.net/test/read.cgi/unix/1669946913/26
28: 18 [sage] 2022/12/11(日) 14:47:07.12 そうみたいですね。評価したら結果が変でした。 デフォルトでdabbrev-expandが呼ばれる仕様なんだった。 http://mevius.5ch.net/test/read.cgi/unix/1669946913/28
29: 18 [sage] 2022/12/11(日) 17:44:27.06 多分、こういうことだろうと思うんですが、 (setq smart-tab-completion-functions-alist `((emacs-lisp-mode . lisp-complete-symbol) (lisp-interaction-mode . lisp-complete-symbol) (text-mode . ,(lambda () (dabbrev-expand nil))) )) 今回の場合は条件がfboundpでチェックされるので同じエラーになりますが、 cond: Wrong type argument: symbolp, (lambda nil (dabbrev-expand nil)) これがなければfuncall以下はちゃんと動きます。 (cond ((fboundp smart-tab-mode-specific-completion-function) (funcall smart-tab-mode-specific-completion-function)) http://mevius.5ch.net/test/read.cgi/unix/1669946913/29
30: 18 [sage] 2022/12/11(日) 17:51:47.16 むしろその場合はこうするだけでいいんですね。 (setq smart-tab-completion-functions-alist '((emacs-lisp-mode . lisp-complete-symbol) (lisp-interaction-mode . lisp-complete-symbol) (text-mode . (lambda () (dabbrev-expand nil))))) >>19 > うーん多分それ先頭の#'全く場違いなんじゃね? そもそも最初に指摘されていたこの点がまずかったと。 http://mevius.5ch.net/test/read.cgi/unix/1669946913/30
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.026s