我正在尝试定义一个函数func->symbol,该函数接受一个函数并将其名称作为符号返回。例如:
(define (pythagoras a b)
(sqrt (+ (* a a) (* b b))))
;; #1
(func->symbol pythagoras) ; Returns: 'pythagoras
;; #2
(func->symbol (if #t pythagoras sqrt)) ; Returns: 'pythagoras
;; #3
(let ((f (if #t pythagoras sqrt)))
(func->symbol f)) ; Returns: 'pythagoras
;; #4
(let ((f (if #t pythagoras sqrt)))
(let ((g f))
(func->symbol g))) ; Returns: 'pythagoras
Run Code Online (Sandbox Code Playgroud)
这是关于如何获取定义名称作为符号的后续问题?它只处理情况#1。对于情况#1,一个简单的宏def->symbol就足够了:
(define-syntax def->symbol
(syntax-rules ()
((_ def) 'def)))
Run Code Online (Sandbox Code Playgroud)
然而,这个宏定义不通过情况#2、#3、#4。是否可以定义func->symbol,或者 Scheme 对此表达能力不够?