有没有办法在读取时获取有关模块的信息?

时间:2016-09-01 14:43:19

标签: racket

今年夏天以来,我一直在玩Racket制作玩具语言。每个表单都有一个固定的arity,默认情况下适用,因此不需要括号。例如。 +有2个,因此+ 3 + 4 5(+ 3 (+ 4 5))+ + 3 4 5(+ (+ 3 4) 5)

为此,我在主模块中存储符号及其符号。读者并不关心它是否是一种特殊的形式或程序,但有没有更好的方法来使用球拍的功能呢?因此,我可以在解析期间导入模块元数据并进行查询吗?

1 个答案:

答案 0 :(得分:1)

这是从符号走向arity的一种方式。

#lang racket

(define base-ns (make-base-namespace))
(define (symbol->arity s)  
  (parameterize ([current-namespace base-ns])
    (procedure-arity (namespace-variable-value s))))

(symbol->arity 'cons)