Saat memposting pertanyaan dan jawaban di sini, orang kadang menggunakan istilah "fungsi" dan "perintah" secara bergantian. Dalam kasus lain, orang hanya menggunakan salah satu dari dua istilah untuk membahas potongan kode tertentu. Karena posting mereka biasanya fokus pada topik lain, mereka tidak menjelaskan mengapa mereka menggunakan satu istilah tetapi tidak yang lain. Begitu:
T: Dalam Emacs Lisp, apa perbedaan antara fungsi dan perintah?
C-h i
, pilih manual Elisp ,i command
- menempatkan Anda tepat di simpulWhat is a function?
, yang membuat semua ini sangat jelas. Bantu pengguna belajar bertanya pada Emacs. (Hanya satu pendapat.)Jawaban:
Setiap perintah adalah fungsi, tetapi tidak setiap fungsi juga merupakan perintah. 1
Perintah termasuk panggilan ke
interactive
; inilah sebabnya perintah biasanya disebut sebagai "fungsi interaktif". Perintah dapat dipanggil melalui M-xname-of-command
RET, dan mereka juga dapat terikat pada urutan kunci. Fungsi reguler tidak termasuk panggilan keinteractive
, tidak bisa dipanggil menggunakan M-x, dan Anda tidak dapat mengikatnya ke urutan tombol. Untuk menjalankan fungsi yang tidak interaktif, Anda dapat menekan M-:(eval-expression
), masukkan nama fungsi yang diikuti oleh nilai untuk setiap argumen yang perlu dilampirkan dalam tanda kurung, dan tekan RET:M-:
(name-of-function arg1 arg2 arg3)
RETJika fungsi ini tidak seharusnya beroperasi pada buffer saat ini, Anda juga bisa masuk
di
*scratch*
buffer dan tekan C-x C-e(eval-last-sexp
) dengan titik diposisikan setelah tanda kurung tutup.Untuk membuat fungsi
bar
tersedia sebagai perintah, Anda dapat membungkusnya dengan fungsi interaktif khusus (foo
) sebagai berikut:Tentu saja, jika
bar
mengambil satu atau lebih argumen, Anda harus menyediakannya untuk membuatfoo
pekerjaan dengan benar.Jika Anda melihat orang menggunakan istilah "fungsi" dan "perintah" secara bergantian, ini mungkin menunjukkan (tergantung pada konteks) bahwa mereka tidak menyadari perbedaan antara konsep-konsep yang mendasarinya.
1 Perhatikan bahwa saya sedang berbicara tentang
defun
di sini. Seperti @Stefan tunjukkan dalam komentar, makro keyboard adalah kasus khusus: Mereka dapat dianggap sebagai perintah , tetapi mereka bukan fungsi.sumber
interactive
"panggilan" biasanya disebut deklarasi (fungsi itu sendiri sebenarnya tidak melakukan apa-apa).M-: (commandp [?a]) RET
will (correclty) memberi tahu Anda bahwa itu[?a]
adalah perintah, tetapi itu bukan fungsi.