当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《是否可以在Lisp中使用函数名的别名?》经验,为你挑选了3个好方法。

......就像包裹一样.

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

例如(defun the-very-very-long-but-good-name () ...),以后在代码中不会有用.但名称Fn-15或首字母缩写也没用.是否可以在尝试调用函数名称的同时拥有类似于包的别名或访问文档字符串?

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



1> Allen..:

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


`defalias`是一个Elisp函数 - 给出@ avp上面的评论听起来好像他们正在使用common-lisp
以上应该是(defalias'newname'oldname).

2> muyinliu..:

来自?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> Thayne..:

您可以setf用来将功能分配给另一个功能单元,例如:

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


这甚至不需要真的是一个宏`(defun alias(new-name prev-name)(setf(symbol-function new-name)(symbol-function prev-name))))也可以工作。
推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有