如何在 Racket 中的自定义字典上创建字典映射?
How to create a dictionary mapping on custom dictionary in Racket?
我在BNF文法中定义了字典作为这个判断:
d ::= () (any boolean) (list cons d d)
意思是,字典是空的,或(任何布尔值)或此类对的列表。
如果我想创建一个映射,比如 "a true",我该怎么做?
如果我这样做
(define-values (d) (values '(a true)))
它只是创建了一个新的d,并没有映射到之前定义的判断d。
IIUC 您希望您的字典只是一个关联列表:
(define d (list (cons 'x #t) (cons 'y #f)))
根据您打算如何实施添加操作,您可以 set!
一个新映射:
(set! d (cons (cons 'z #t) d))
或者只创建一个新列表(首选):
(define d (list (cons 'z #t) (cons 'x #t) (cons 'y #f)))
无论如何,字典 d
将具有预期格式的新映射:
'((z . #t) (x . #t) (y . #f))
我在BNF文法中定义了字典作为这个判断:
d ::= () (any boolean) (list cons d d)
意思是,字典是空的,或(任何布尔值)或此类对的列表。
如果我想创建一个映射,比如 "a true",我该怎么做?
如果我这样做
(define-values (d) (values '(a true)))
它只是创建了一个新的d,并没有映射到之前定义的判断d。
IIUC 您希望您的字典只是一个关联列表:
(define d (list (cons 'x #t) (cons 'y #f)))
根据您打算如何实施添加操作,您可以 set!
一个新映射:
(set! d (cons (cons 'z #t) d))
或者只创建一个新列表(首选):
(define d (list (cons 'z #t) (cons 'x #t) (cons 'y #f)))
无论如何,字典 d
将具有预期格式的新映射:
'((z . #t) (x . #t) (y . #f))