sorting - strange behavior of sort in racket -
i have following defined:
(struct type (parent dirty) #:mutable #:transparent) (define types (make-hash)) (define (add-key predicate parent) (begin (hash-ref! types parent (type empty #t)) ;;if parent doesn't exist, created no parent. (let([node (hash-ref types predicate #f)]) (if(or (boolean? node) ;;the node not on list (not(equal? (type-parent node) parent))) ;;the node has different parent (hash-set! types predicate (type parent #t)) (printf "nothing do\n") )))) (define (ancestor? predicate1 predicate2) (let ([node (hash-ref types predicate2 #f)]) (cond [(false? node)(error "following predicate not in types: " predicate2)] [(empty? (type-parent node)) #f] [(equal? (type-parent node) predicate1) #t] [else (ancestor? predicate1 (type-parent node))]))) it seems work great, , can stuff like:
> (ancestor? integer? even?) #t > (ancestor? list? even?) #f > (ancestor? integer? odd?) #t > i seem have issue sort (sort '(integer? odd? number? list? even?) ancestor?) throws following error: following predicate not in types: integer? is, of course, defined in implementation. thing sure key-value pair exists, can manipulate it, can manually run every line of code of ancestor... i'am puzzled causing this... idea?
i took code as-is , dropped in file.
added trace line
ancestor?: either add first line(displayln `(ancestor? ,predicate1 ,predicate2))or add(trace ancestor?)(after(require racket/trace)).this shows offending call broken in code:
(ancestor? 'odd? 'integer?)leads exact error.
(i have no idea code doing: idea it's easy derive problem mechanically.)
Comments
Post a Comment