I am trying to find the median of 2 sorted arrays using Binary Search in Racket. For reference kindly refer to approach 4 here But I can't seem to make the code work.
(define (find-median x y n m)
(define (loop l h realmid)
(cond [(> l h) #f]
[else (
(let ()
(define mid (/ (+ l h) 2))
(define leftAsize mid)
(define leftBsize (- realmid mid))
(define leftA (if (> leftAsize 0) (vector-ref x (- leftAsize 1)) -inf.0))
(define leftB (if (> leftBsize 0) (vector-ref y (- leftAsize 1)) -inf.0))
(define rightA (if (< leftAsize n) (vector-ref x leftAsize) +inf.0))
(define rightB (if (< leftBsize m) (vector-ref x leftAsize) +inf.0)))
(cond
[(and (<= leftA rightB) (<= leftB rightA)) (cond
[(= 0 (modulo (+ m n) 2)) ( / 2 (+ (max leftA leftB) (min rightA rightB)))]
[else (max leftA leftB)]
)]
[(> leftA rightB) (loop l (- mid 1) realmid)]
[else (loop (+ mid 1) h realmid)]))]))
(define start 0)
(define end n)
(define realmid ( / (+ n m 1) 2))
(loop start end realmid))
(define x (vector 1 2))
(define y (vector 3))
(define n (vector-length x))
(define m (vector-length y))
(cond [(> n m) (writeln (find-median y x m n))]
[else (writeln (find-median x y n m))])
This is the error I am currently facing.
jdoodle.rkt:5:16: begin (possibly implicit): no expression after a sequence of internal definitions
in: (begin (define mid (/ (+ l h) 2)) (define leftAsize mid) (define leftBsize (- realmid mid)) (define leftA (if (> leftAsize 0) (vector-ref x (- leftAsize 1)) -inf.0)) (define leftB (if (> leftBsize 0) (vector-ref y (- leftAsize 1)) -inf.0)) (define right...
location...:
jdoodle.rkt:5:16
jdoodle.rkt:6:16
jdoodle.rkt:7:16
jdoodle.rkt:8:16
jdoodle.rkt:9:16
jdoodle.rkt:10:16
jdoodle.rkt:11:16
jdoodle.rkt:12:16
Thanks in advance for any help.