(sicp?)puts/getsを少し変更
(put 'test '(test) "test") (get 'test '(test)) 0:user> *** ERROR: hash table doesn't have an entry for key (test)
(put
(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"