如何获取 Scheme 定义类型实例的参数?

问题描述 投票:0回答:1

我有一个函数定义的精简

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)
不正确。在我看来是正确的。我错过了什么?

scheme racket plai
1个回答
1
投票

您有一个命名问题——过程参数不能与

fundef
变体同名。
此外,在匹配模式中重复使用名称“fn-name”有点令人困惑。

这是一个工作示例:

(define (fundef-fun-name fun)
    (type-case FunDef fun
        [fundef (name) 
            name]))
© www.soinside.com 2019 - 2024. All rights reserved.