0
這是一個導出哈希表的庫。該庫還包含填充哈希表表達式:從庫中導出填充哈希表
(library (abc-1)
(export tbl)
(import (rnrs))
(define tbl (make-eq-hashtable))
(hashtable-set! tbl 'a 10)
(hashtable-set! tbl 'b 20)
(hashtable-set! tbl 'c 30))
這裏是圖書館的另一個版本,其中出口可用於填充哈希表的程序:
(library (abc-2)
(export tbl init-tbl)
(import (rnrs))
(define tbl (make-eq-hashtable))
(define (init-tbl)
(hashtable-set! tbl 'a 10)
(hashtable-set! tbl 'b 20)
(hashtable-set! tbl 'c 30)))
是它認爲不好的形式取第一種方法?即有一個也執行任意表達式的庫?這種方法有缺點嗎?
相關問題...在庫中,非定義表達式必須出現在定義之後。要解決此限制,我使用這個宏:
(define-syntax no-op-def
(syntax-rules()
((_ expr ...)
(define no-op
(begin
expr
...)))))
例如:
(define t0 (make-eq-hashtable))
(no-op-def
(hashtable-set! t0 'a 10))
(define t1 (make-eq-hashtable))
(no-op-def
(hashtable-set! t1 'b 20))
此外,還有缺點,通過這種解決方法穿插表達和定義?