相关疑难解决方法(0)

为什么在emacs-lisp中的函数参数之前使用#'?

我熟悉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.以下表格都是等效的:

 (lambda (x) (* x x))
 (function (lambda (x) (* x x)))
 #'(lambda (x) (* x x))
Run Code Online (Sandbox Code Playgroud)

和帮助 function

功能是一种特殊的形式eval.c.

(function ARG)
Run Code Online (Sandbox Code Playgroud)

喜欢quote,但对于作为功能的对象更喜欢.在字节编译中,function导致其参数被编译.quote 不能那样做.

所以这似乎是一个潜在的优化,但不再是.此外,来自ML/Haskell背景,以不同于任何其他数据的方式处理函数似乎很奇怪.

题:

你是否同意#'应该在emacs-lisp函数参数中使用?(简要说明Common Lisp中为什么需要它们也会很棒.)

笔记:

我认为当#'省略(值与函数)时它可能会读取不同的单元格.但这似乎是错误的,因为文档function没有说明抓住功能单元格.这是通过使用来实现的symbol-function.

相关问题是

但他们似乎认为这#'是不必要的,至少在lambdas中是这样.

lisp emacs elisp common-lisp

16
推荐指数
1
解决办法
1024
查看次数

Emacs用于多个命令的键绑定

我是emacs的新手,并且有一个菜鸟问题.我可以将一个键绑定到一个特定的函数(global-set-key (kbd "C-c a b c") 'some-command),其中some-command是一个函数.我怎样才能调用两个函数(比如some-commandsome-other-command一个键绑定)?非常感谢!

emacs elisp key-bindings

13
推荐指数
2
解决办法
5535
查看次数

为什么不引用lambda?

有人告诉我,我不应该引用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呢?

谢谢!

emacs elisp

9
推荐指数
1
解决办法
426
查看次数

(功能)在Emacs中是否有任何用途?

文档中的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

lisp emacs elisp

7
推荐指数
1
解决办法
700
查看次数

http-post-simple.el - (lambda(field)...)引用'而不是#'

有人可以给我一个手动调试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)

emacs

3
推荐指数
1
解决办法
995
查看次数

标签 统计

emacs ×5

elisp ×4

lisp ×2

common-lisp ×1

key-bindings ×1