Возможно ли иметь псевдоним для имени функции в Лиспе? - PullRequest
10 голосов
/ 10 октября 2008

... так же, как и пакеты.

Я использую Emacs (возможно, он может предложить какое-то решение).

Например, (defun the-very-very-long-but-good-name () ...) бесполезен позже в коде. Но имя типа Fn-15 или аббревиатура первых букв тоже не полезно. Возможно ли использовать псевдоним для пакетов или получить доступ к строке документации при попытке вызвать имя функции?

Другими словами, возможно ли, чтобы функции как-то смешивали самодокументированные и короткие имена?

Ответы [ 8 ]

32 голосов
/ 10 октября 2008

Вы хотите defalias. (defalias 'newname 'oldname) сохранит документацию и даже покажет, что "newname является псевдонимом для` oldname '"при запросе документации.

4 голосов
/ 28 апреля 2014

Вы можете использовать setf, чтобы назначить функцию ячейке функции другой, например:

(defmacro alias (new-name prev-name)
  `(setf (symbol-function ,new-name) (symbol-function ,prev-name))) 
4 голосов
/ 12 января 2014

от 《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)
4 голосов
/ 14 октября 2008

Если все это печатает, что делает постоянное использование длинных имен нежелательным, тогда да, emacs может помочь. Проверьте abbrev-mode. Также хорошо продуманным в этом контексте является hippie-expand.

Если это вопрос читабельности, это сложнее.

0 голосов
/ 10 октября 2008

вы можете использовать (defmacro ...) для псевдонима функции

0 голосов
/ 10 октября 2008

Я не знаю Emacs, но не подойдет (определить короткое имя longnamefunctionblahblah)?

0 голосов
/ 10 октября 2008

Вы могли бы просто иметь функцию, которая просто вызывает другую функцию.

0 голосов
/ 10 октября 2008

Если ваша проблема в том, что вы не можете вспомнить очень длинное имя функции, но вы помните ЧАСТЬ имени, для этого и есть «уместно». В моем Emacs у меня есть «C-h a», связанная с «гипер-по поводу». Вы вводите подстроку символа, который ищете, и в нем перечислены все совпадения.

...