2016-09-01 84 views
1

自從今年夏天以來,我一直在玩球拍玩具語言。每個表單都有一個固定的參數,默認情況下,不需要括號。例如。 +包含2,所以+ 3 + 4 5(+ 3 (+ 4 5))+ + 3 4 5(+ (+ 3 4) 5)有沒有辦法在讀取時獲取有關模塊的信息?

要做到這一點,我在主模塊中存儲的符號和他們的arity。讀者不關心它是一種特殊的形式還是程序,但是有沒有更好的方法使用球拍的特徵來做到這一點?因此,我可以導入模塊元數據和查詢,而不是在解析過程中?

+0

嗨。 「讀者不在乎它是否......」這個「它」指的是什麼? 存儲元數據通常是在一個子模塊中完成的(但是我有點不確定你想在哪裏(以及何時!)使用元信息。 – soegaard

+0

@soegaard讀者中的一個符號,成爲結果語法中的一個標識符。如果我要爲球拍/底座製作新的語法,我可以在球拍/底座上查找''cons'以發現它的真實性嗎? – Sylwester

+0

您是否自己編寫了自己的閱讀器?是否正在重複使用內置的閱讀器? – soegaard

回答

1

這是一種從符號到秩序的方法。

#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) 
+2

非常好。如果我只想查看一個特定的模塊,比如'racket/list',我將如何創建一個只有這個模塊的命名空間? – Sylwester

+0

使用make-empty-namespace創建名稱空間。然後使用namespace-require來要求模塊。 – soegaard

+0

多數民衆贊成我所嘗試的,但它慘敗失敗,但我發現[這裏](https://docs.racket-lang.org/guide/mk-namespace.html)「make-base-empty-namespace」將是正確的選項。看起來像這個週末將全部是關於命名空間。謝謝:) – Sylwester

相關問題