我有一个计划项目,我想用它制作一本字典而不使用' dict'功能。 IO示例:
(define d (make-dictionary)) ;; creates an empty dictionary
(define d1 (d (cons "a" 1))) ;;d1 is d+("a" 1), d not changing
(d1 "a") ;; = 1
(define d2 (d1 (cons "b" 15))) ;;d2 is d1+("b" 15), d1 not changing
(d2 "b") ;; = 15
(d2 "a") ;; = 1
我根本不明白如何使用括号作为参数获取make-dictionary,它总是返回一个过程而不是键入答案。
(define (make-dictionary)
'())
(define ( ( (make-dictionary) pairs) ) ;;trying to get it with parenthesis
append make-dictionary (cons pairs '()))
我知道过去几天我已经提出了很多问题,但我是新手,我正在尽我所能去学习,但我已经没时间了......帮助?
答案 0 :(得分:1)
我猜您正在尝试实施关联列表。可悲的是,你提出用圆括号做的事情根本没有意义。更合理的方法是使用单独的过程来添加和检索键/值对:
(define (make-dictionary)
'())
(define (add-dictionary dict pair)
(cons pair dict))
(define (get-dictionary dict key)
(let ((pair (assoc key dict))) ; use the built-in `assoc` procedure!
(if pair (cdr pair) #f)))
现在,我们这样使用它:
(define d (make-dictionary))
(define d1 (add-dictionary d (cons "a" 1)))
(get-dictionary d1 "a") ;; = 1
(define d2 (add-dictionary d1 (cons "b" 15)))
(get-dictionary d2 "a") ;; = 1
(get-dictionary d2 "b") ;; = 15
(get-dictionary d2 "c") ;; = #f
答案 1 :(得分:0)
根据我的理解,您在编写值为列表的字典时遇到困难。我认为更简单的方法是创建关联列表并使用查找函数。
所以Al看起来像
(define my-al (list (list key (list value1a value1b))
(list key (list value2a value 2b))))
lookup-al:Key AL - >值
(define (lookup-al k alst)
(cond [(empty? alst) false]
[(equal? k (first (first alst))) (second (first alst))]
[else (lookup-al k (rest alst))]))