Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Emacs 是否可以在Lisp中为函数名使用别名?_Emacs_Lisp - Fatal编程技术网

Emacs 是否可以在Lisp中为函数名使用别名?

Emacs 是否可以在Lisp中为函数名使用别名?,emacs,lisp,Emacs,Lisp,…就像包裹一样 我使用Emacs(也许,它可以提供某种解决方案) 例如,(定义非常长但很好的名称()…)在以后的代码中没有用处。但是像Fn-15这样的名称或首字母缩写也没有用。 在尝试调用函数名时,是否可以使用包的别名或访问文档字符串 换句话说,函数是否可能以某种方式混合使用自文档和短名称?如果您的问题是无法记住很长的函数名称,但您记住了名称的一部分,那么“apropos”就是这个意思。在我的Emacs中,我将“C-ha”绑定到“hyper-apropos”。您输入要查找的符号的子字符串,它列出

…就像包裹一样

我使用Emacs(也许,它可以提供某种解决方案)

例如,
(定义非常长但很好的名称()…)
在以后的代码中没有用处。但是像
Fn-15
这样的名称或首字母缩写也没有用。 在尝试调用函数名时,是否可以使用包的别名或访问文档字符串


换句话说,函数是否可能以某种方式混合使用自文档和短名称?

如果您的问题是无法记住很长的函数名称,但您记住了名称的一部分,那么“apropos”就是这个意思。在我的Emacs中,我将“C-ha”绑定到“hyper-apropos”。您输入要查找的符号的子字符串,它列出了所有匹配项。

您可以简单地拥有一个只调用另一个函数的函数

我不知道Emacs,但是(定义shortname longnamefunctionblahblah)不起作用吗?

您可以使用
(defmacro…
来别名函数

您想要的
defalias
(defalias'newname'oldname)
将保留文档,甚至在请求文档时显示“newname是'oldname'的别名”。

如果所有的键入都不希望继续使用长名称,那么是的,emacs可以提供帮助。退房在这方面,我们也考虑到了这一点


如果是可读性的问题,那就更难了

来自《论Lisp》?以下是代码:

(defmacro alias (new-name prev-name)
  `(defmacro ,new-name (&rest args)
     `(,',prev-name ,@args)))

; use: (alias df defun)


(defun group (source n)
  (if (zerop n) (error "zero length"))
  (labels ((rec (source acc)
             (let ((rest (nthcdr n source)))
               (if (consp rest)
                   (rec rest (cons (subseq source 0 n) acc))
                   (nreverse (cons source acc))))))
    (if source (rec source nil) nil)))

(defmacro aliasx (&rest names)
  `(alias
     ,@(mapcar #'(lambda (pair)
                   `(alias ,@pair))
               (group names 2))))

; use: (aliasx df1 defun 
;              df2 defun 
;              df3 defun)

您可以使用
setf
将函数分配给另一个函数单元,例如:

(defmacro alias (new-name prev-name)
  `(setf (symbol-function ,new-name) (symbol-function ,prev-name))) 

你可能会丢失文档。我的问题是我想要短名称和描述,我想。Ctrl-H f defalias会在你需要的时候为你提供。上面应该是(defalias'newname'oldname)。
defalias
是一个Elisp函数-如果上面有@avp的注释,听起来他们使用的是公共LispVerdamelt,你完全正确,我把环境弄糊涂了。但那是很久以前的事了。。。事实上,尽管这个答案是完全正确的,我也接受它,但如果我不关心代码的大小,使用hippie expand会更容易。。。首先,它不是自动的。第二,我需要自己去关心它。第三,它很笨重…:(我要重复我对leppie说过的话。只是……我不知道……它看起来很难看。我的意思是,它需要努力,但提供的只是可读性。Abbrev mode&hippie expand可以毫不费力地完成类似的工作……但无论如何,感谢您的投入!感谢muyinliu的投入,但Allen已经回答了这个问题。Oto,这个解决方案要求我记住unn必要的细节,我更愿意避免。这甚至不需要是一个宏
(defun别名(新名称前置名称)(setf(符号函数新名称)(符号函数前置名称))