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

时间:2008-10-10 16:04:20

标签: emacs lisp

......就像打包一样。

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

例如(defun the-very-very-long-but-good-name () ...)稍后在代码中没用。但是像Fn-15或第一个字母缩写这样的名称也没用。 是否可以在尝试调用函数名称时为包提供别名或访问文档字符串?

换句话说,功能是否有可能以某种方式混合自我记录和短名称?

8 个答案:

答案 0 :(得分:32)

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

答案 1 :(得分:4)

如果所有打字都使得长名称不断使用,那么是的,emacs可以提供帮助。查看abbrev-mode。在这方面也考虑到了hippie-expand

如果这是一个可读性问题,那就更难了。

答案 2 :(得分:4)

来自“On 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)

答案 3 :(得分:4)

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

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

答案 4 :(得分:0)

如果你的问题是你记不起一个很长的函数名,但你记得名字的一部分,那就是“apropos”的用途。在我的Emacs中,我有“C-h a”绑定到“超级apropos”。您输入要查找的符号的子字符串,并列出所有匹配项。

答案 5 :(得分:0)

我不知道Emacs,但不会(定义短名称longnamefunctionblahblah)工作?

答案 6 :(得分:-1)

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

答案 7 :(得分:-1)

您可以使用(defmacro ...)为函数设置别名