(sicp?)puts/getsを少し変更

(put 'test '(test) "test")
(get 'test '(test))
0:user> *** ERROR: hash table doesn't have an entry for key (test)

(put )のがlistだと上手く認識してくれないみたい。

(car (hash-table-keys (hash-table-get parent-hash 'test)))
1:user> => (test)
;;eq?で評価しているからかもしれない。

(eq? 'test 'test)
(eq? '(test) '(test))
(equal? '(test) '(test))
;; 5:user> => #t
;; 6:user> => #f
;; 7:user> => #t

とりあえず、'(test) -> 'testにすることで対応。

(define parent-hash (make-hash-table))

(define (put op type item)
  (if (pair? type)
      (set! type (car type)))
  (print type)
  (if (not (hash-table-exists? parent-hash op))
      (hash-table-put! parent-hash op (make-hash-table)))
  (let ((child (hash-table-get parent-hash op)))
    (hash-table-put! child type item)))

(define (get op type)
  (if (pair? type)
      (set! type (car type)))
  (if (not (hash-table-exists? parent-hash op))
      (error "this operator is not exist" op type))
  (let ((child (hash-table-get parent-hash op)))
    (hash-table-get child type)))


;; (get 'test '(test))
;; 11:user> => "test"