我熟悉Emacs Lisp,但不熟悉Common(或任何其他)Lisp.一些Lisp程序员建议(例如,emacs的一个基本函数),它可以#'在Lisp代码中的函数参数前使用.例如:
(mapc #'my-fun '(1 2 3))
Run Code Online (Sandbox Code Playgroud)
在Emacs Lisp中,我相信这相当于
(mapc 'my-fun '(1 2 3))
Run Code Online (Sandbox Code Playgroud)
从elisp手册,第12.7节.
读取语法
#'是使用的简写function.以下表格都是等效的:Run Code Online (Sandbox Code Playgroud)(lambda (x) (* x x)) (function (lambda (x) (* x x))) #'(lambda (x) (* x x))
和帮助 function
功能是一种特殊的形式
eval.c.Run Code Online (Sandbox Code Playgroud)(function ARG)喜欢
quote,但对于作为功能的对象更喜欢.在字节编译中,function导致其参数被编译.quote不能那样做.
所以这似乎是一个潜在的优化,但不再是.此外,来自ML/Haskell背景,以不同于任何其他数据的方式处理函数似乎很奇怪.
你是否同意#'应该在emacs-lisp函数参数中使用?(简要说明Common Lisp中为什么需要它们也会很棒.)
我认为当#'省略(值与函数)时它可能会读取不同的单元格.但这似乎是错误的,因为文档function没有说明抓住功能单元格.这是通过使用来实现的symbol-function.
相关问题是
但他们似乎认为这#'是不必要的,至少在lambdas中是这样.
我是emacs的新手,并且有一个菜鸟问题.我可以将一个键绑定到一个特定的函数(global-set-key (kbd "C-c a b c") 'some-command),其中some-command是一个函数.我怎样才能调用两个函数(比如some-command和some-other-command一个键绑定)?非常感谢!
有人告诉我,我不应该引用lambda,比方说,
(global-set-key (quote [f3]) '(lambda () (interactive) (other-window -1) ))
Run Code Online (Sandbox Code Playgroud)
我试过,如果我不引用lambda,它同样有效
(global-set-key (quote [f3]) (lambda () (interactive) (other-window -1) ))
Run Code Online (Sandbox Code Playgroud)
但是,我不明白为什么后者有效(并且也是首选,现在后者有效,为什么前者也有效).
如果lambda表达式被定义为另一个函数,我们就会调用
(global-set-key (quote [f3]) 'my-function)
Run Code Online (Sandbox Code Playgroud)
防止立即评估我的功能.我理解lambda表达式是my-function的匿名版本.那么为什么不引用lambda呢?
谢谢!
从文档中的function表格:
像`quote',但是对于作为函数的对象更喜欢.在字节编译中,`function'导致其参数被编译.`quote'不能那样做.
因此#'(lambda ...),可以启用lambda表单的字节编译.
另一方面,如手册中所述,不再需要.
lambda形式还有另一个作用:它通过使用
function子程序告诉Emacs求值程序和字节编译器它的参数是一个函数 .
[...]以下表格均相同:
(lambda (x) (* x x))
(function (lambda (x) (* x x)))
#'(lambda (x) (* x x))
Run Code Online (Sandbox Code Playgroud)
在这种情况下,这使得函数形式无用.
还有其他情况,函数形式会有用吗?
有什么情况下它的存在既不必要也不相同quote?
有人可以给我一个手动调试http-post-simple.el,以便与最新版本的Emacs Trunk一起使用:http: //www.emacswiki.org/emacs/http-post-simple.el 这是使用Org-Mode Toodledo Sync所需的文件.打开Emacs时,错误消息是:
(lambda (field) ...) quoted with ' rather than with #'
Run Code Online (Sandbox Code Playgroud)
http-post-simple.el错误来自哪里的摘录如下:
(defun http-post-encode-fields (fields &optional charset)
"Encode FIELDS using `http-post-encode-string', where
FIELDS is an alist of \(
\(field-name-as-symbol . \"field value as string\"\) |
\(field-name \"value1\" \"value2\" ...\)
\)*
CHARSET defaults to 'utf-8"
(let ((charset (or charset 'utf-8)))
(mapconcat #'identity
(mapcar '(lambda (field)
(concat (symbol-name (car field))
"="
(http-post-encode-string (cdr field) charset)))
(mapcan '(lambda (field)
(if (atom (cdr field)) …Run Code Online (Sandbox Code Playgroud)