Q.1: (i 2) --> error (i (lambda (x) x)) --> (lambda (x) x) ((i (lambda (x) x)) 2) --> 2 Q.2: See Lecture Note 3. Q.3: Yes. Q.4: (define streak (lambda (l n) (if (null? l) l (if (eq? (car l) n) (cons n (streak (cdr l) (+ n 1))) (streak (cdr l) n))))) (define streak-cps (lambda (l n k) (if (null? l) (k l) (if (eq? (car l) n) (streak-cps (cdr l) (+ n 1) (lambda (v) (k (cons n v)))) (streak-cps (cdr l) n k))))) (define s2 (lambda (l n) (streak-cps l n (lambda (v) v)))) (define streak-fo (lambda (l n k) (if (null? l) (apply-cont k l) (if (eq? (car l) n) (streak-fo (cdr l) (+ n 1) (cons n k)) (streak-fo (cdr l) n k))))) (define apply-cont (lambda (k x) (if (null? k) x (apply-cont (cdr k) (cons (car k) x))))) (define s3 (lambda (l n) (streak-fo l n '()))) (define l '*dummy*) (define n '*dummy*) (define k '()) (define x '*dummy*) (define streak-imp (lambda () (if (null? l) (begin (set! x l) (apply-imp)) (if (eq? (car l) n) (begin (set! l (cdr l)) (set! k (cons n k)) (set! n (+ n 1)) (streak-imp)) (begin (set! l (cdr l)) (streak-imp)))))) (define apply-imp (lambda () (if (null? k) x (begin (set! x (cons (car k) x)) (set! k (cdr k)) (apply-imp)))))