我有一个函数定义的精简
define-type
:
(define-type FunDef
(fundef (fn-name symbol?)))
这里是一个满足
define-type
的函数定义:
(fundef 'f)
如何获取函数的名称?对于我举的例子,如何得到
'f
?
我试过这些但它们不起作用:
(second (fundef 'f))
(second (list (fundef 'f)))
(second '(fundef 'f))
获取函数名称的正确方法是什么?
更新
我尝试了“用type-case解构它”的建议。这是我尝试过的:
(define (fundef-fun-name fundef)
(type-case FunDef fundef
[fundef (fn-name)
fn-name]))
生成此错误消息的原因:
string:3:9: type-case: this is not a variant of the specified type
如果我理解该错误消息,那就是说
fundef (fn-name)
不正确。在我看来是正确的。我错过了什么?
您有一个命名问题——过程参数不能与
fundef
变体同名。这是一个工作示例:
(define (fundef-fun-name fun)
(type-case FunDef fun
[fundef (name)
name]))