相关疑难解决方法(0)

emacs/elisp:用于的哈希(井号,数字符号,octothorp)符号是什么?

这是做什么的?

(add-hook 'compilation-mode-hook #'my-setup-compile-mode)
Run Code Online (Sandbox Code Playgroud)

......和它有什么不同

(add-hook 'compilation-mode-hook 'my-setup-compile-mode)
Run Code Online (Sandbox Code Playgroud)

emacs elisp

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

为什么在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
查看次数

在普通的lisp中编写lambda表达式

我目前正在阅读Paul Graham的ANSI Common Lisp,我有一个关于编写lambda表达式的问题.

我们需要在lambda表达式前加上#'?如果我在REPL中写这样的东西,它会正常工作

> ((lambda (x) (+ x 1)) 1)
  2
Run Code Online (Sandbox Code Playgroud)

这样也会

> (mapcar (lambda (x) (+ x x)) '(1 2 3 4))
  (2 4 6 8)
Run Code Online (Sandbox Code Playgroud)

我明白这#'表示一个功能.所以我的问题是,它是某种惯例还是推荐的做法?如果我不为lambdas添加前缀#',可能出现任何问题,是否依赖于实现?

lambda clisp common-lisp

15
推荐指数
1
解决办法
7579
查看次数

为什么在CLISP中不需要#'(尖锐引用)符号?

我正在从"Practical Common Lisp"一书中学习Lisp.有一次,我应该输入以下代码:

[1] (remove-if-not #'evenp '(1 2 3 4 5 6 7 8 9 10))
(2 4 6 8 10)
Run Code Online (Sandbox Code Playgroud)

我想这里的想法当然是remove-if-not想要一个在向它提供参数时可以返回T或NIL的函数,然后将该函数应用于列表中的所有符号,返回仅包含列表的列表那些返回NIL的符号.

但是,如果我现在在CLISP中编写以下代码:

[2] (remove-if-not 'evenp '(1 2 3 4 5 6 7 8 9 10)
(2 4 6 8 10)
Run Code Online (Sandbox Code Playgroud)

它仍然有效!所以我的问题是,是否使用尖引号表示法,或仅仅使用引用是否足够?现在看起来额外的锐利只是让程序员知道"嘿,这是一个功能,而不仅仅是一些随机的符号!" - 但如果它有任何其他用途,我很想知道它.

我使用的是GNU CLISP 2.49(2010-07-07,sheesh,实际上很老).

lisp clisp common-lisp

5
推荐指数
2
解决办法
502
查看次数

Lisp,为列表中的每个元素做一些事情

如何在列表中的每个元素上执行功能?例如说我有一个清单:

(1 x q)
Run Code Online (Sandbox Code Playgroud)

我是使用my-function1xq。有预定义的功能吗?类似于foreach“高级”语言?还是我必须使用car和手动完成它cdr

任何帮助将非常感激!

lisp foreach

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

标签 统计

common-lisp ×3

lisp ×3

clisp ×2

elisp ×2

emacs ×2

foreach ×1

lambda ×1