今年夏天以来,我一直在玩Racket制作玩具语言。每个表单都有一个固定的arity,默认情况下适用,因此不需要括号。例如。 +
有2个,因此+ 3 + 4 5
为(+ 3 (+ 4 5))
,+ + 3 4 5
为(+ (+ 3 4) 5)
。
为此,我在主模块中存储符号及其符号。读者并不关心它是否是一种特殊的形式或程序,但有没有更好的方法来使用球拍的功能呢?因此,我可以在解析期间导入模块元数据并进行查询吗?
答案 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)