相关疑难解决方法(0)

为什么#'在Common Lisp中的lambda之前使用?

我想知道为什么我看到的大多数Common Lisp代码都有类似的东西

(mapcar #'(lambda (x) (* x x)) '(1 2 3))

而不仅仅是

(mapcar (lambda (x) (* x x)) '(1 2 3)),

这似乎也有效.我开始学习Common Lisp,并且在Scheme中有一些背景,这引起了我的兴趣.

编辑:我知道您需要带有函数名称的#',因为它们与变量位于不同的命名空间中.我的问题只是在lambda之前的#',因为lambda已经返回一个函数对象(我认为).#' - 由于宏扩展而减少lambdas的工作只会让它变得更有趣......

common-lisp

35
推荐指数
2
解决办法
4212
查看次数

什么时候应该使用Emacs#'函数语法?

基本上,我什么时候应该使用Emacs Lisp的function程序?我还没有发现其中有行为上的差异,如果你函数作为参数传递的任何实例'like-this#'like-this.事实上,如果我评估(eq 'goto-char #'goto-char)它返回t.

我遇到的Emacs Lisp代码很少使用function/ #'; 作者只是quote/ '一切.
例:(add-hook 'emacs-lisp-hook 'turn-on-eldoc-mode)

但是,我可以找到一些反例.这是Emacs 24.3源代码中的一个electric.el:

(add-hook 'post-self-insert-hook
          #'electric-indent-post-self-insert-function
          'append)
Run Code Online (Sandbox Code Playgroud)

猜测和进一步的问题:

  • 它只是一个Lisp-2风格大会吗?
  • 它与字节编译有关吗?
  • 这对图书馆作家来说是否有意义?比如,如果您打算在大量环境和Emacs版本下运行您的代码?(推论是如果你只是"dotfile-tinkering"那么你不需要担心这一切.)
  • 什么时候应该引用lambda表达式?我什么时候可以不加引号?
    例如,(do-something '(lambda …
    (do-something (lambda …
  • 在早期版本的Emacs中是否有一些限制,这些限制引起了elisp的这些方面?就像,我可以忽略大多之间的区别'#',只要我使用一个版本的Emacs超过最近X

lisp emacs elisp

34
推荐指数
3
解决办法
3148
查看次数

在普通的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
查看次数

普通的lisp中的#'

在Practical Common Lisp一书的第3章中,有一个类似SQL的选择和函数的例子.这是它的简化版本:

(defun where (x) 
   #'(lambda (item)
     (> item x)))
Run Code Online (Sandbox Code Playgroud)

它像这样使用:

(remove-if-not (where 2) (list 1 2 3 4))
Run Code Online (Sandbox Code Playgroud)

在本书的前面部分解释说,#'序列用于表示它后跟一个函数名,而不是一个需要评估的变量.我不明白为什么这里需要它.我尝试在where没有它的情况下实现该功能,它也可以工作:

(defun where (x) 
   (lambda (item)
     (> item x)))
Run Code Online (Sandbox Code Playgroud)

我试着谷歌搜索它,并且,正如你可以想象的那样,通过这样一系列的角色,它不是一个非常有成效的搜索.我不知道这件事的名字.在上面的代码中是否有任何特殊原因需要它?

common-lisp quote

14
推荐指数
2
解决办法
6538
查看次数

emacs的基本功能

我之前从未编写过emacs函数,并且想知道是否有人可以帮助我开始.我希望有一个函数,它将突出显示的区域解析它(通过","),然后用已经内置到emacs中的另一个函数计算每个块.

突出显示的代码可能是这个样子:x <- function(w=NULL,y=1,z=20){}(R代码),我想刮出来w=NULL,y=1z=20然后通过每一个功能已经包含emacs的.有关如何入门的任何建议?

emacs elisp

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

标签 统计

common-lisp ×3

elisp ×2

emacs ×2

clisp ×1

lambda ×1

lisp ×1

quote ×1