common lisp function/macro aliases

家住魔仙堡 提交于 2020-01-05 04:06:10

问题


I would like to set aliases in common lisp(clisp to be exact) for commands that are used a lot, such as "defun" and "lambda" etc, is it possible to do this?

This is actually kind of a duplicate of this question, but I can not comment and the solution does not work for defun or lambda in both sbcl and clisp


回答1:


Macros:

CL-USER 5 > (setf (macro-function 'dm) (macro-function 'defmethod))
#<Function DEFMETHOD 410009A014>

CL-USER 6 > (dm m1+ ((v vector)) (map 'vector #'1+ v))
#<STANDARD-METHOD M1+ NIL (VECTOR) 4130003913>

CL-USER 7 > (m1+ #(1 2 3 4))
#(2 3 4 5)



回答2:


The whole point by macros is to provide a source rewriting service.. Thus I want to give you this and you can make that out of it:

(defmacro df (name (&rest arguments) &body body)
  `(defun ,name ,arguments ,@body))

(df test (x) (+ x x))
(test 5) ; ==> 10

We have just shortened the name.. Lets make another one:

(defmacro df1 (name &body body)
  `(defun ,name (_) ,@body))

(df1 test (+ _ _))
(test 5) ; ==> 10

And so on...



来源:https://stackoverflow.com/questions/43034254/common-lisp-function-macro-aliases

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!