可能这是一个非常愚蠢的问题,但是在尝试了所有内置的pathname -family 函数和cl-fad/pathname-utils包之后,我仍然无法弄清楚如何将相对路径转换为绝对路径(相对于 $PWD):
; let PWD be "/very/long/way"
(abspath "../road/home"); -> "/very/long/road/home"
Run Code Online (Sandbox Code Playgroud)
假设函数的abspath工作方式与 Python 中一样os.path.abspath()。
有没有办法从 Common Lisp 的泛型函数中提取方法列表?
例如:
(defmethod say ((self string)) ; method-0
(format t "Got string: ~a~%" self))
(defmethod say ((self integer)) ; method-1
(format t "Got integer: ~a~%" self))
(defmethod say ((self symbol)) ; method-2
(format t "Got symbol: ~a~%" self))
(extract-methods-from-generic 'say) ; -> (method-0-obj method-1-obj method-2-obj)
Run Code Online (Sandbox Code Playgroud)
更具体地说,我的目标是 ECL,所以如果这可以通过 C API 完成 - 没关系。
我需要这个来做下一个技巧:
(defgeneric merged-generic ())
(loop for method
in (extract-methods-from-generic 'some-generic-0)
do (add-method merged-generic method))
(loop for method
in (extract-methods-from-generic 'some-generic-1)
do (add-method merged-generic method))
Run Code Online (Sandbox Code Playgroud)