タグ付けされた質問 「functions」

このタグをElisp `functions`に使用して、Lispプログラミング言語の基本的な関数実行の使用法、定義、再定義、エイリアスの定義、およびその他の標準機能を使用します。関数が特定のEmacs機能に関するものである場合は、Elispタグを追加します。

1
関数とコマンドの違いは何ですか?
ここに質問と回答を投稿するとき、人々は「機能」と「コマンド」という用語を同じ意味で使用することがあります。その他の場合、人々は2つの用語のうちの1つだけを使用して、特定のコードを議論します。彼らの投稿は通常他のトピックに焦点を合わせているため、ある用語を使用しているのに他の用語を使用していない理由を説明していません。そう: Q: Emacs Lispでは、関数とコマンドの違いは何ですか?

4
ラムダ式をシャープクォートするのはいつですか?
Q:今までならば、それはに便利ですときに、シャープ引用lambdaし、これまでならばとき、私たちがしなければならないではないシャープ引用lambda? 人々lambdaは3つの方法でsを使用します。 平野: (lambda (x) x) 引用: '(lambda (x) x) シャープ引用符: #'(lambda (x) x) このSOスレッドが三種類を説明し、このSOスレッドはなぜ引用符(NB:しないように説明してシャープ引用符)lambdaだ、とこのSOスレッドはまた、引用符とシャープクォート間の区別を説明します。 ここで、匿名関数の手動ノードlambdaとlambdasが自己引用符であることに注意するためのdocstring : フォームの呼び出し(lambda ARGS DOCSTRING INTERACTIVE BODY)は自己引用です。ラムダ式を評価した結果は式そのものです。ラムダ式は関数として扱われます... そのため、(lambda (x) x)と#'(lambda (x) x)は同等であるように見えますが、そうで'(lambda (x) x)はありません(最も重要なことは、バイトコンパイル時)。 a を引用することはめったにないように見えますlambdaが、シャープ引用符を使用する必要があるかどうかは不明です。 シャープクォートはlambda単なるスタイル上の選択ですか、それともシャープクォートが実際に役立つ状況はありますか? aをクォートクォートしてはいけないlambda、つまりそうするとコードの意味が変わるような状況はありますか?
30 elisp  functions 

2
関数は名前にアクセスできますか?
Cには__func__、現在の関数名を保持するマジック変数があります。BashにはFUNCNAME、呼び出しスタック内のすべての関数の名前を保持する配列があります!!! Emacs Lispに同様のものがありますか?または、関数がその名前にアクセスする簡単な方法はありますか? Emacs Lispマニュアル(関数の章または変数と関数のインデックスの章12および..)に答えが見つかりませんでした。
25 elisp  functions 

1
記号の前の「#」と「#」の違いは何ですか?
私はEmacsに少し慣れていない。いくつかの構成を見ると、「add-hook」に2つのタイプのコマンドがあることがわかりました。 (add-hook 'LaTeX-mode-hook #'LaTeX-math-mode) そして (add-hook 'LaTeX-mode-hook 'LaTeX-math-mode) これは私を長い間混乱させており、Googleで「#」を検索する方法がわかりません... ありがとう。
22 elisp  hooks  functions  quote 

1
好奇心:prognは何の略ですか?
Emacsのドキュメントによると: progn is a special form in `C source code'. (progn BODY...) Eval BODY forms sequentially and return value of last one. 何がprogn(またはその起源)の略ですか? 使用法:Clojureの->マクロと同等ですか?
21 functions 

2
ロードファイルとロードの違い
私は両方の機能のドキュメントを調べましたが、多くの情報を流していないようです。loadload-fileはインタラクティブなリストコンパイルされた関数であるのに対して、Cソースコードの組み込み関数であるという事実を除いて、実際の違いは何ですか。 init.el両方が同じ仕事をしているように見えるので、使用する推奨機能は何ですか?
17 elisp  functions 

1
関数をキーにバインドしたり、Mxで呼び出したりできないのはなぜですか?
関数を作成し、Mx経由で呼び出して、キーにバインドしたいと思います。これは私の機能です: (defun my-function () (message "This is a great function")) で呼び出そうとするとM-x my-function、エラーが発生します:[no match]ミニバッファで。 キーにバインドしようとすると(またはマウスクリック): (global-set-key (kbd "C-c a") 'my-function) 動作しているように見えますが、で呼び出すとC-c aエラーが発生します 間違ったタイプの引数:commandp、my-function 関数を使用できないのはなぜですか?


1
(バックトレース/スタックトレース)から関数が呼び出される場所を見つける方法は?
(transient-mark-modeで)リージョンが非アクティブ化されるという問題に遭遇しました。関数deactivate-markが呼び出され、それがどこから(なぜ)呼び出されたかを知りたい。 試しましM-x debug-on-entry RET deactivate-markたが止まりましたが、発信者を見つける方法がありませんでした。表示される全体のスタックトレースは次のとおりです。 Debugger entered--entering a function: * deactivate-mark() 私は試しましたM-x edebug-eval-defunが、Edebugは発信者も表示しません。 なぜ(どこから)deactivate-mark呼び出されているのかを知る方法は?私はバックトレースまたはスタックトレース機能を探しています。 編集: advice-addトリック: (defun message-show-backtrace () (message "%s" (backtrace-frame 10))) (advice-add deactivate-mark :before #'message-show-backtrace) で生成さnilれ*Messages*ます。 編集:詳細deactivate-mark:http : //emacshorrors.com/posts/deactivate-mark.html

2
シャープな引用はいつ使用すべきですか?
私は他の人のeLispコードで使用されている鋭い引用を見て、私はそれらを自分で使用しますが、それらが適切である場合とそうでない場合は完全には明確ではありません。 シャープ引用符を使用するのが適切な場合と、通常の単一引用符を代わりに使用する必要がある場合を正確に説明できますか?

2
Emacs 24のバイトコード関数のArgspecまたはArity
関数のアリティをテストするコードがあります。これを使用して、パッケージの最新バージョンで追加されたオプションの引数が存在するかどうかを判断します。subr-arity組み込み関数を呼び出し、バイトコードオブジェクトとラムダのarglistを解析します。 (defun function-argspec (func) (if (symbolp func) (setq func (indirect-function func))) (cond ((byte-code-function-p func) (aref func 0)) ((and (consp func) (eq (car func) 'lambda) (consp (cdr func))) (car (cdr func))) )) これはEmacs 23までうまく機能しました。Ubuntu14.04上のEmacs 24.3では、一部の機能ではうまく機能しますが、他の機能では機能しません。 (function-argspec 'revert-buffer) (&optional ignore-auto noconfirm preserve-modes) (require 'vc) vc (function-argspec 'vc-print-log-internal) 1283 どうやら、バイトコード形式がマニュアルに反映されていない方法で変更されました。 (symbol-function 'vc-print-log-internal) #[1283 …

2
関数を削除するには?
私がすることのために、私は一時的に使用する多くの関数を定義する傾向があります。寿命は通常約1〜2週間です。次に、新しい一連の関数を定義します。 これらの定義が実際にどこにあるのか、また関数名を指定するだけでそれらを削除する方法を見つけることができませんでした(これは便利でしょう)。
8 functions 

4
特定のメジャーモードによって排他的に提供されるすべての関数のリストを取得する方法
この質問はhttps://stackoverflow.com/q/605785/に触発されています。ことでM-x describe-function <TAB>、私はemacsのが現在の状態で使用可能なすべての対話型またはnonintractive関数のリストを取得することができます。特定のモード(例えば、latex-mode)がアクティブ化されている場合、latex-modeで使用可能な機能もリストされるため、より長いリストが表示されます。 私の質問は、特定のモード(たとえば、latexモード)で排他的に使用できるすべての関数のリストを取得する方法ですか?つまり、そのモードでは提供されない他のすべての機能を除外します。上記のリンクのように、関数の短い説明を提供することも便利です。

1
`(fset SYMBOL KEYMAP)`は何をしますか?
私は発射物ソースファイルを読んでいましたが、彼らは次のことを行います: (defvar projectile-command-map (let ((map (make-sparse-keymap))) ; define-keys map) "Keymap for Projectile commands after `projectile-keymap-prefix'.") (fset 'projectile-command-map projectile-command-map) なぜこれを行うのですか?下位互換性のためですか?

1
関数をローカルでオーバーライドしますが、元の関数の呼び出しを許可します
アドバイス機能により、関数の動作をグローバルに変更できます。アドバイス定義は、元の関数を呼び出すことができます。 (defadvice foo (around foo-bar activate compile) "Always set `qux' to t when running `foo'." (let ((qux t)) ad-do-it)) clパッケージは提供しflet、ローカルの機能を無効にするマクロを。 (defun foo () "global") (flet ((foo () "local")) (some-code-that-calls-foo)) それは元のfoo関数への参照を許可しません。ローカルのオーバーライドで元の関数を呼び出す必要がある場合はどうなりますか? (defun foo () "global") (flet ((foo () (concat (foo) "+local"))) ;; this will cause an infinite loop when (foo) is …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.