- (let* ((funv (make-symbol "funv"))
- (args (make-symbol "args")))
- `(list
- ,fun
- (lambda (,funv ,args ,@fvs)
- (apply ,funv ,args))
- ,@fvs)))
+ (if (null fvs)
+ fun
+ (let* ((funv (make-symbol "funv"))
+ (args (make-symbol "args")))
+ `(list
+ (lambda (,funv ,args ,@fvs)
+ (apply ,funv ,args))
+ ,fun
+ ,@fvs))))
+
+(defmacro closure-partial-call (clo &rest args)
+ "Call partially."
+ `(list (list ,@args) ,clo))