(use callable-hash-tables) (define +none+ (list 'none)) (define (nested-get callable path #!optional default) (let loop ((path path) (callable/val callable)) (if (null? path) (if (eq? callable/val +none+) default callable/val) (if (procedure? callable/val) (let* ((key (car path)) (val (callable/val key +none+))) (if (eq? val +none+) default (loop (cdr path) val))) default)))) (define ^ make-callable-hash-table) (define silly-list (^ `((car . 0) (cdr . ,(^ `((car . 1) (cdr . ,(^ `((car . 2) (cdr)))))))))) (print (nested-get silly-list '(cdr cdr car)))