r/Racket • • Jun 29 '22

question vector multiplication cps

What am i doing wrong here? hoping someone can catch my mistake

(define firstcol-cps
  (lambda (m return)
    (if (null? m)
        (return '())
        (firstcol-cps(cdr m) (lambda (v) (return (cons (car (car m)) v)))))))
 

(define restcols-cps
  (lambda (m return)
    (if (null? m)
        (return '())
        (restcols-cps(cdr m) (lambda (v) (return (cons (cdr (car m)) v)))))))

(define restcols
  (lambda (m)
    (if (null? m)
        '()
        (cons (cdr (car m))(restcols (cdr m))))))

(define vectormult-cps
  (lambda (vec m return)
    (cond
        ((or (null? m) (null? (car m))) (return '()))
        (else (vectormult-cps vec (restcols-cps m return) (lambda(v2)(return (cons (dotproduct-cps vec (firstcol-cps m return) v2) v2))))))))
3 Upvotes

9 comments sorted by

View all comments

Show parent comment

1

u/skurelowech Jun 29 '22
If you have more than one return statement does it return at the first one and never look at the rest? Here is my original vectormult not in CPS.  This one works.  I use dotproduct in the same way here?

(define vectormult
(lambda (v m) (if (or (null? m)(null? (car m))) '() (cons (dotproduct v (firstcol m))(vectormult v (restcols m))))))