真有这么复杂?为什么不来点OOP,这些值包装进struct。然后写个函数专门来describe这个struct?
比如
(require 'cl-lib)
(require 's)
(cl-defstruct person
name age sex)
(defun describe-person (person)
(pcase-let (((cl-struct person name age sex)
person))
(s-lex-format "\
Name: ${name}
Sex: ${sex}
Age: ${age}}")))
(describe-person (make-person :name "Alice" :age 40 :sex 'female))
那就定义构造函数,从需要计算的raw argument里构造struct.
你可以在describe函数里加入任意逻辑,或者定义多个describe函数,不同场合应用不同函数。
这种做法除了罗嗦一点,在抽象和代码复用上都是很好的选择。