diff options
| author | Mike Vink <mike1994vink@gmail.com> | 2023-05-07 19:10:16 +0200 |
|---|---|---|
| committer | Mike Vink <mike1994vink@gmail.com> | 2023-05-07 19:10:16 +0200 |
| commit | d6752a78aa1dd2483a943acd2c3d8bb5fa6e8d2d (patch) | |
| tree | bdb880c3d3fdd84c91522ab7caea06e307fdb929 /shared | |
| parent | ef8fd9c3e94f37ab4cdd73601cef9d35724ff79a (diff) | |
make raising and dropping more robust
Diffstat (limited to 'shared')
| -rw-r--r-- | shared/data-directed-programming.rkt | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/shared/data-directed-programming.rkt b/shared/data-directed-programming.rkt index decdf0f..3e555ee 100644 --- a/shared/data-directed-programming.rkt +++ b/shared/data-directed-programming.rkt @@ -121,7 +121,6 @@ (define (make-apply-with-coercion get get-coercion) (define (make-apply get) (lambda (op . args) - ;; (display args) (let ((type-tags (map type-tag args))) (let ((proc (get op type-tags))) (if proc @@ -153,7 +152,6 @@ (iter type-tags)) (lambda (op . args) - ;; (display args) (let ((type-tags (map type-tag args))) (let ((proc (get op type-tags))) (if proc @@ -229,11 +227,15 @@ (define (equ? d1 d2) (local-apply 'equ? d1 d2)) + (define (raisable? datum) + (get 'raise (list (type-tag datum)))) (define (can-drop? datum) (let ((dropped (project datum))) - (let ((raised (raisetower dropped))) - (and (get 'equ? (list (type-tag raised) (type-tag datum))) - (equ? raised datum))))) + (if (raisable? dropped) + (let ((raised (raisetower dropped))) + (and (get 'equ? (list (type-tag raised) (type-tag datum))) + (equ? raised datum))) + false))) (define (projectable? datum) (get 'project (list (type-tag datum)))) @@ -249,9 +251,6 @@ (if proc (towerdrop (apply proc (map contents args))) (let ((raised-args (raise-until-type-match get (highest-type get args) args))) - (newline) - (display (list "RAISED -- " raised-args)) - (newline) (let ((raised-proc (get op (map type-tag raised-args)))) (if raised-proc (towerdrop (apply raised-proc (map contents raised-args))) |
